Apache Kafka 0.10 技术内幕:设计思路
2016-03-15
目标
Kafka 简单的看作一个 MQ,那 Kafka 如何设计的呢?
- MQ 本质是 Queue(队列),其中的消息是否是有序的?
- Kafka 是 MQ,如何保证并发效率?大量的 Producer 以及大量的 Consumer,如何提升生产和消费效率?
- Kafka 集群的可用性,怎么样?如果 Kafka 集群的单个节点宕机,是否会影响整个集群的可用性?
Kafka 整体结构
Kafka 集群,是集群,是服务器的集群,每一个服务节点,称为 Broker
,由 id
唯一标识。
Kafka 集群整体结构如下:
Kafka 集群结构:
- Broker:集群的每个服务节点,称为
Broker
- Producer: 向 kafka 指定 topic 发送数据的程序,称作
Producer
- Consumer: 从 kafka 指定 topic 消费数据的程序,称作
Consumer
核心问题
问题1:不同业务数据,分开存放
不同的业务数据,分开存放:
- OS:CPU、内存、网络
- APP:pv、响应时间
解决方式:topic
- 同一种数据放入同一个 topic
- 不同数据,通过 topic 分离
问题2:消息的单播、多播?
消息的单播、多播?
- 单播:一条 msg,一个 consumer
- 多播:一条 msg,多个 consumer
解决方式:consumer group
- 一个 msg,送入多个 consumer group
- 一个 consumer group 中,只能有一个 consumer 处理某一条 msg
问题3:并发效率
并发效率:
- 同一类业务数据,多 producer,多 consumer
- 并行处理?
解决方式:partition
- 一个 topic,划分为 多个 partition
- partition 之间能够并行处理
问题4:msg 之间的顺序保证
msg 之间的顺序保证:
- 推荐系统中,时间序列挖掘
- 业务需求上,严格限制,msg 之间的先后顺序
解决办法:partition 内部有序
- 将有顺序要求的 msg,送入
同一个
partition
- 将时间戳,放入 msg 内
问题5:Kafka 的可用性
Kafka 的可用性:
- Kafka 集群,由broker组成
- 某个 broker 宕掉,数据是否会丢失?
解决办法:replica
- 每个 partion 都存储多份,分布在不同 broker 上
- replica 的角色,分为 leader、follower
小结
Kafka 中,没有凭白无故的引入新的
术语
,每引入一个术语
,都是用来解决问题的.
关键术语(关键原理):
topic
: kafka维护的消息种类,每一类消息由一个topic标识consumer group
:解决单播、多播问题partition
: 每个topic可以分成多个区,分布在不同的broker上replica
: 每个topic可以设置副本数,所有的副本称作replicaleader
: 所有的副本中只有leader处理读写,其他的follower从leader同步isr
: replica中能够跟上leader的实例称作isr
Kafka 集群的典型内部结构:
常见问题
其他几个疑问:
- partition 的 leader 失联后, 选举新的 leader 期间:几个细节
- producer 和 consumer 是否正常工作?
- 新的 leader 选举之后,如何周知到 producer 和 consumer?
- partition 数量 > consumer 数量,此时,消费关系:几个细节
- 每个 consumer 分配多个 partition ?
- 针对一个 consumer 如何在 partition 之间进行切换?
- 消费关系调整:什么时候,会触发消费关系的调整?
- broker 数量调整?
- partition 的 leader 重新选举?
- consumer 数量调整?
参考资料
- Kafka 官网
- Top 10 Uses For A Message Queue
- Kafka a Distributed Messaging System for Log Processing
- Learning Apache Kafka(2nd Edition)
- Kafka 设计解析-郭俊
原文地址:https://ningg.top/apache-kafka-10-design-idea/