超简单的Kafka架构入门指南,看这一篇就够了

1. Kafka简介Apache Kafka 是一种高吞吐、分布式的流处理平台,由 LinkedIn 开发并于 2011 年开源 。它具有高伸缩性、高可靠性和低延迟等特点,因此在大型数据处理场景中备受青睐 。Kafka 可以处理多种类型的数据,如事件、日志、指标等,广泛应用于实时数据流处理、日志收集、监控和分析等领域 。
通常用作消息队列和流处理,作为消息队列的时候,竞品有RabbitMQ、ActiveMQ、RocketMQ、Apache Pulsar等 。
2. Kafka架构下面介绍一下Kafka架构中最重要的三个参与者:

  1. Producer(生产者):生产者负责将消息发送到 Kafka 集群 。
  2. Consumer(消费者):消费者负责从 Kafka 集群中拉取并消费消息 。
  3. Broker(代理节点):Broker 是 Kafka 集群中的一个服务代理节点,可以看作是一台服务器 。Kafka 集群通常由多个 Broker 组成,以实现负载均衡和容错 。

超简单的Kafka架构入门指南,看这一篇就够了

文章插图
3. 分区与副本Kafka为了对消息进行分类,引入了Topic(主题)的概念 。生产者在发送消息的时候,需要指定发送到某个Topic,然后消息者订阅这个Topic并进行消费消息 。
Kafka为了提升性能,又在Topic的基础上,引入了Partition(分区)的概念 。Topic是逻辑概念,而Partition是物理分组 。一个Topic可以包含多个Partition,生产者在发送消息的时候,需要指定发送到某个Topic的某个Partition,然后消息者订阅这个Topic并消费这个Partition中的消息 。
Kafka为了提高系统的吞吐量和可扩展性,把一个Topic的不同Partition放到多个Broker节点上,充分利用机器资源,也便于扩展Partition 。
Kafka为了保证数据的安全性和服务的高可用,又在Partition的基础上,引入Replica(副本)的概念 。一个Partition包含多个Replica,Replica之间是一主多从的关系,有两种类型Leader Replica(领导者副本)和Follower Replica(跟随者副本),Replica分布在不同的Broker节点上 。
Leader Replica负责读写请求,Follower Replica只负责同步Leader Replica数据,不对外提供服务 。当Leader Replica发生故障,就从Follower Replica选举出一个新的Leader Replica继续对外提供服务,实现了故障自动转移 。
下图展示的是,同一个Topic的不同Partition在Broker节点的分布情况:
超简单的Kafka架构入门指南,看这一篇就够了

文章插图
Kafka为了提升Replica的同步效率和数据写入效率,又对Replica进行分类 。针对一个Partition的所有Replica集合统称为AR(Assigned Replicas,已分配的副本),包含Leader Replica和Follower Replica 。与Leader Replica保持同步的Replica集合称为ISR(In-Sync Replicas,同步副本),与Leader Replica保持失去同步的Replica集合称为OSR(Out-of-Sync Replicas,失去同步的副本),AR = ISR + OSR 。
Leader Replica将消息写入磁盘前,需要等ISR中的所有副本同步完成 。如果ISR中某个Follower Replica同步数据落后Leader Replica过多,会被转移到OSR中 。如果OSR中的某个Follower Replica同步数据追上了Leader Replica,会被转移到ISR中 。当Leader Replica发生故障的时候,只会从ISR中选举出新的Leader Replica 。
4. 偏移量Kafka为了记录副本的同步状态,以及控制消费者消费消息的范围,于是引入了LEO(Log End Offset,日志结束偏移量)和HW(High Watermark,高水位) 。
LEO表示分区中的下一个被写入消息的偏移量,也是分区中的最大偏移量 。LEO用于记录Leader Replica和Follower Replica之间的数据同步进度,每个副本中各有一份 。
HW表示所有副本(Leader和Follower)都已成功复制的最小偏移量,是所有副本共享的数据值 。换句话说,HW之前的消息都被视为已提交,消费者可以消费这些消息 。用于确保消息的一致性和只读一次 。
下面演示一下LEO和HW的更新流程:
  1. 初始状态,三个副本中各有0和1两条消息,LEO都是2,位置2是空的,表示是即将被写入消息的位置 。HW也都是2,表示Leader Replica中的所有消息已经全部同步到Follower Replica中,消费者可以消费0和1两条消息 。

超简单的Kafka架构入门指南,看这一篇就够了

文章插图
  1. 生产者往Leader Replica中发送两条消息,此时Leader Replica的LEO的值增加2,变成4 。由于还没有开始往Follower Replica同步消息,所以HW值和Follower Replica中LEO值都没有变 。由于消费者只能消费HW之前的消息,也就是0和1两条消息 。


    推荐阅读