这是我参与「第四届青训营 」笔记创作活动的的第5天
这篇笔记是用来记录对于Kafka的认识。
传统定义来讲,Kafka 是一个分布式的基于发布/订阅模式的消息队列。
首先,消息队列有哪些应用场景?
- MQ(Message Queue)消息通道
- EventBridge事件总线
事件源:将云服务、自定义应用、SaaS应用等应用程序产生的事件消息发布到事件集。
事件集:存储接收到的事件消息,并根据事件规则将事件消息路由到事件目标。
事件目标:消费事件消息。
- DataPlatform 流数据平台
1.提供批/流数据处理能力
2.各类组件提供各类Connect
3.提供Streaming/Function能力
4.根据数据schema灵活的进行数据预处理
消息队列的作用
缓存/消峰:有助于控制和优化数据流经过系统的速度,解决生产消息和消费消息的处理速度不一致的情况。
解耦:允许我们独立的扩展或修改两边的处理过程,只要确保它们遵守同样的接口约束。
简单来讲,消息队列就像是一个大型超市,有很多进货的渠道,然后也有很多消费者来消费数据。
异步通信:允许用户把一个消息放入队列,但并不立即处理它,然后在需要的时候再去处理它们。
Kafka就是典型的消息队列之一
架构介绍
Producer(生产者)
-
为提高吞吐量,一个topic分为多个partition
-
为配合分区的设计,提出消费者组的概念,组内每个消费者并行消费
-
为提高可用性,为每个partition增加若干副本
Broker
-
若干个 Broker节点组成 Kafka集群
-
Broker作为消息的接收模块,使用React 网络模型进行消息数据的接收.Broker作为消息的持久化模块,进行消息的副本复制以及持久化
-
Broker作为高可用模块,通过副本间的Failover进行高可用保证
Broker启动会尝试去水中注册controller。节点注册上controller节点的broker即为controller。 其余broker 会 watch controller节点,节点出现异常则进行重新注册。
Controller作用
-
Broker重启/宕机时,负责副本的Failover切换
-
Topic创建/删除时,负责Topic meta信息广播
-
集群扩缩容时,进行状态控制
-
Partition/Replica状态机维护
Kafka的副本ISR机制
AR(Assign Replica):已经分配的所有副本OSR
OSR(Out Sync Replica):很久没有同步数据的副本ISR
ISR(in-sync replica set):
-
—直都在同步数据的副本
-
可以作为热备进行切换的副本
-
min.insync.replicas最少isr数量配置
Kafka ack机制
-
0:生产者发送过来的数据,不需要等数据落盘应答。可靠性差,效率高。
-
1:生产者发送过来的数据,Leader收到数据后应答。可靠性中等,效率中等。
-
-1:生产者发送过来的数据,Leader和isr队列里面的所有节点收齐数据后应答。可靠性高,效率低。
Kafka正是由于ISR副本复制机制,外加写入段ack机制,实现了系统的高可用。
Kafka对于数据可靠的保证
Leader维护了一个动态的ISR,意为和Leader保持同步的Follower+Leader集合
如果Follower长时间未向Leader发送通信请求或同步数据,则该Follower将被踢出ISR。这样的话就不用等待长期联系不上或者已经故障的节点,实现高可用。
Kafka通过将ack设为-1,再加上将min.insync.replica(ISR里应答的最小副本数量)设置为1,以及分区副本大于等于2,来保证写入Kafka系统中的数据不丢失。