Kafka架构介绍|青训营笔记

82 阅读3分钟

这是我参与「第四届青训营 」笔记创作活动的的第5天

这篇笔记是用来记录对于Kafka的认识。

传统定义来讲,Kafka 是一个分布式的基于发布/订阅模式的消息队列。

首先,消息队列有哪些应用场景

  • MQ(Message Queue)消息通道
  • EventBridge事件总线

image.png 事件源:将云服务、自定义应用、SaaS应用等应用程序产生的事件消息发布到事件集。

事件集:存储接收到的事件消息,并根据事件规则将事件消息路由到事件目标。

事件目标:消费事件消息。

  • DataPlatform 流数据平台

image.png 1.提供批/流数据处理能力

2.各类组件提供各类Connect

3.提供Streaming/Function能力

4.根据数据schema灵活的进行数据预处理

消息队列的作用

缓存/消峰:有助于控制和优化数据流经过系统的速度,解决生产消息和消费消息的处理速度不一致的情况。

解耦:允许我们独立的扩展或修改两边的处理过程,只要确保它们遵守同样的接口约束。

简单来讲,消息队列就像是一个大型超市,有很多进货的渠道,然后也有很多消费者来消费数据。

异步通信:允许用户把一个消息放入队列,但并不立即处理它,然后在需要的时候再去处理它们。

Kafka就是典型的消息队列之一

架构介绍

image.png

Producer(生产者)

image.png

  • 为提高吞吐量,一个topic分为多个partition

  • 为配合分区的设计,提出消费者组的概念,组内每个消费者并行消费

  • 为提高可用性,为每个partition增加若干副本

Broker

image.png

  • 若干个 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机制

image.png 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系统中的数据不丢失。