NingG +

Apache Kafka 0.10 技术内幕:设计思路

目标

Kafka 简单的看作一个 MQ,那 Kafka 如何设计的呢?

  1. MQ 本质是 Queue(队列),其中的消息是否是有序的?
  2. Kafka 是 MQ,如何保证并发效率?大量的 Producer 以及大量的 Consumer,如何提升生产和消费效率?
  3. Kafka 集群的可用性,怎么样?如果 Kafka 集群的单个节点宕机,是否会影响整个集群的可用性?

Kafka 整体结构

Kafka 集群,是集群,是服务器的集群,每一个服务节点,称为 Broker,由 id 唯一标识。

Kafka 集群整体结构如下:

Kafka 集群结构:

  1. Broker:集群的每个服务节点,称为 Broker
  2. Producer: 向 kafka 指定 topic 发送数据的程序,称作 Producer
  3. Consumer: 从 kafka 指定 topic 消费数据的程序,称作 Consumer

核心问题

问题1:不同业务数据,分开存放

不同的业务数据,分开存放:

  1. OS:CPU、内存、网络
  2. APP:pv、响应时间

解决方式:topic

  1. 同一种数据放入同一个 topic
  2. 不同数据,通过 topic 分离

问题2:消息的单播、多播?

消息的单播、多播?

  1. 单播:一条 msg,一个 consumer
  2. 多播:一条 msg,多个 consumer

解决方式:consumer group

  1. 一个 msg,送入多个 consumer group
  2. 一个 consumer group 中,只能有一个 consumer 处理某一条 msg

问题3:并发效率

并发效率:

  1. 同一类业务数据,多 producer,多 consumer
  2. 并行处理?

解决方式:partition

  1. 一个 topic,划分为 多个 partition
  2. partition 之间能够并行处理

问题4:msg 之间的顺序保证

msg 之间的顺序保证:

  1. 推荐系统中,时间序列挖掘
  2. 业务需求上,严格限制,msg 之间的先后顺序

解决办法:partition 内部有序

  1. 将有顺序要求的 msg,送入同一个 partition
  2. 将时间戳,放入 msg 内

问题5:Kafka 的可用性

Kafka 的可用性:

  1. Kafka 集群,由broker组成
  2. 某个 broker 宕掉,数据是否会丢失?

解决办法:replica

  1. 每个 partion 都存储多份,分布在不同 broker 上
  2. replica 的角色,分为 leader、follower

小结

Kafka 中,没有凭白无故的引入新的术语,每引入一个术语,都是用来解决问题的.

关键术语(关键原理):

  1. topic: kafka维护的消息种类,每一类消息由一个topic标识
  2. consumer group:解决单播、多播问题
  3. partition: 每个topic可以分成多个区,分布在不同的broker上
  4. replica: 每个topic可以设置副本数,所有的副本称作replica
    • leader: 所有的副本中只有leader处理读写,其他的follower从leader同步
    • isr: replica中能够跟上leader的实例称作isr

Kafka 集群的典型内部结构:

参考资料

Top