带你一文了解 Kafka
发布时间:2021-06-02 21:40:09 所属栏目:大数据 来源:互联网
导读:温故而知新,反复学习优秀的框架,定有所获。因为工作原因,需要用到 Kafka 的特殊场景,周末再次阅读了 kafka 的资料,收获不少。 应用场景 异步解构:在上下游没有强依赖的业务关系或针对单次请求不需要立刻处理的业务; 系统缓冲:有利于解决服务系统的吞
|
温故而知新,反复学习优秀的框架,定有所获。因为工作原因,需要用到 Kafka 的特殊场景,周末再次阅读了 kafka 的资料,收获不少。
应用场景
异步解构:在上下游没有强依赖的业务关系或针对单次请求不需要立刻处理的业务;
系统缓冲:有利于解决服务系统的吞吐量不一致的情况,尤其对处理速度较慢的服务来说起到缓冲作用;
消峰作用:对于短时间偶现的极端流量,对后端的服务可以启动保护作用;
数据流处理:集成 spark 做实事数据流处理。
Kafka 拓扑图(多副本机制)
由上图我们可以发现 Kafka 是分布式,同时对于每一个分区都存在多副本,同时整个集群的管理都通过 zookeeper 管理。
Kafka 核心组件
broker
Kafka 服务器,负责消息存储和转发;一 broker 就代表一个 kafka 节点。一个 broker 可以包含多个 topic
topic
消息类别,Kafka 按照 topic 来分类消息
partition
topic 的分区,一个 topic 可以包含多个 partition,topic 消息保存在各个 partition 上;由于一个 topic 能被分到多个分区上,给 kafka 提供给了并行的处理能力,这也正是 kafka 高吞吐的原因之一。
partition 物理上由多个 segment 文件组成,每个 segment 大小相等,顺序读写(这也是 kafka 比较快的原因之一,不需要随机写)。每个 Segment 数据文件以该段中最小的 offset ,文件扩展名为.log。当查找 offset 的 Message 的时候,通过二分查找快找到 Message 所处于的 Segment 中。
offset
消息在日志中的位置,可以理解是消息在 partition 上的偏移量,也是代表该消息的唯一序号。
同时也是主从之间的需要同步的信息。
Producer
生产者,负责向 Kafka Broker 发消息的客户端
Consumer
消息消者,负责消费 Kafka Broker 中的消息
Consumer Group
消费者组,每个 Consumer 必须属于一个 group;(注意的是 一个分区只能由组内一个消费者消费,消费者组之间互不影响。)
Zookeeper
管理 kafka 集群,负责存储了集群 broker、topic、partition 等 meta 数据存储,同时也负责 broker 故障发现,partition leader 选举,负载均衡等功能。
服务治理既然 Kafka 是分布式的发布/订阅系统,这样如果做的集群之间数据同步和一致性,kafka 是不是肯定不会丢消息呢?以及宕机的时候如果进行 Leader 选举呢?
数据同步
在 Kafka 中的 Partition 有一个 leader 与多个 follower,producer 往某个 Partition 中写入数据是,只会往 leader 中写入数据,然后数据才会被复制进其他的 Replica 中。而每一个 follower 可以理解成一个消费者,定期去 leader 去拉去消息。而只有数据同步了后,kafka 才会给生产者返回一个 ACK 告知消息已经存储落地了。
ISR
在 Kafka 中,为了保证性能,Kafka 不会采用强一致性的方式来同步主从的数据。而是维护了一个:in-sync Replica 的列表,Leader 不需要等待所有 Follower 都完成同步,只要在 ISR 中的 Follower 完成数据同步就可以发送 ack 给生产者即可认为消息同步完成。同时如果发现 ISR 里面某一个 follower 落后太多的话,就会把它剔除。
![]() (编辑:漯河站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |

