重要名词解释:
log end offset (logEndOffset),表示log中最后的message的offst位置.
high watermark (HW),表示Partition各个replicas数据间同步且一致的offset位置,即表示allreplicas已经commit位置,每个Broker缓存中维护此信息,并不断更新。
Kafka中replication复制数据
Kafka的复制机制既不是完全的同步复制,也不是单纯的异步复制。完全同步复制要求All Alive Follower都复制完,这条消息才会被认为commit,这种复制方式极大的影响了吞吐率。而异步复制方式下,Follower异步的从Leader复制数据,数据只要被Leader写入log就被认为已经commit,这种情况下如果Follower都复制完都落后于Leader,而如果Leader突然宕机,则会丢失数据。而Kafka的这种使用ISR的方式则很好的均衡了确保数据不丢失以及吞吐率。Follower可以批量的从Leader复制数据,而且Leader充分利用磁盘顺序读以及send file(zero copy)机制,这样极大的提高复制性能,内部批量写磁盘,大幅减少了Follower与Leader的消息量差。
优点
- 性能高,吞吐量大。
- 降低了系统和磁盘开销,Leader充分利用磁盘顺序读以及send file(zero copy)机制。
- 降低Leader与Follower之间网络开销和交互次数。
缺点
- 有可能会占用大量网络带宽(例如本来集群很大而且数据量很多,后来新增Broker节点需要迁移数据),甚至堵塞网络,需要有流控机制,否则会影响线上服务。
- 因为Follower是批量拉取Leader消息,如果设置为保证所有replicas commit,才返回Ack给生产者会存在抖动现象,Follow拉取Leader修改HW,当HW与当次生产者请求logEndOffset的offst一致时,客户端等待时间会拉长。
Kafka中partition replication之间同步数据,从partition的leader复制数据到follower只需要一个线程(ReplicaFetcherThread),实际上复制是follower(一个follower相当于consumer)主动从leader批量拉取消息的,这极大提高了吞吐量,从中可以看出无处不显示Kafka高吞吐量设计思想。
这是一个异步复制过程,follow从leader批量拉取消息进行同步数据
Kafka中partition replica复制机制:
Kafka中每个Broker启动时都会创建一个副本管理服务(ReplicaManager),该服务负责维护ReplicaFetcherThread与其他Broker链路连接关系,该Broker中存在多少Follower的partitions对应leader partitions分布在不同的Broker上,有多少Broker就会创建相同数量的ReplicaFetcherThread线程同步对应partition数据,Kafka中partition间复制数据是由follower(扮演consumer角色)主动向leader获取消息,follower每次读取消息都会更新HW状态。每当Follower的partitions发生变更影响leader所在Broker变化时,ReplicaManager就会新建或销毁相应的ReplicaFetcherThread。
Kafka Broker中follower partition与ReplicaFetcherThread对应关系
partition三副本情况:
partition两副本情况:
Kafka中partitions数据一致性:
Kafka中Producer发送消息到Broker,Broker有三种返回方式,分别为noack、leader commit成功就ack、leader和follower同时commit成功才返回ack。第三种方式是数据强一致性。
如何保证数据强一致性?
当Producer发送消息到leader partition所在Broker时,首先保证leader commit消息成功,然后创建一个“生产者延迟请求任务”,并判断当前partiton的HW是否大于等于logEndOffset,如果满足条件即表示本次Producer请求partition replicas之间数据已经一致,立即向Producer返回Ack。否则待Follower批量拉取Leader的partition消息时,同时更新Leader ISR中HW,然后检查是否满足上述条件,如果满足向Producer返回Ack。
相关推荐
- **ACK=1**: 只等待Leader Partition的确认,但跟随者分区(Follower Partition)的数据可能丢失。 - **ACK=all**: 等待所有分区(包括跟随者)的确认,确保消息不会丢失。 **1.2 Broker** - **定义**: Broker是...
在主数据中心,每个Kafka Broker都有一个领导者(Leader)和跟随者(Follower),领导者负责接收和处理生产请求,跟随者则同步领导者的数据。如果主数据中心发生故障,可以快速切换到从数据中心的Broker成为新的领导...
《Kafka技术内幕:图文详解Kafka源码设计与实现》是一本深入解析Apache Kafka的专著,旨在帮助读者理解Kafka的核心设计理念、内部机制以及源码实现。这本书结合图文并茂的方式,使得复杂的概念变得更为易懂。同时,...
当Follower长时间未与Leader同步或落后过多时,Leader会将其从ISR中移除,以确保数据的一致性。 - **数据同步**:Kafka采用Pull模型,Follower主动从Leader拉取数据,这有助于减少网络延迟并提高效率。 通过以上...
Leader 负责处理所有读写请求,Follower 同步 Leader 的数据。这种设计提高了系统的可用性和容错能力。 **2.3 记录** 每个记录包含 key、value 和 timestamp 三部分。Timestamp 用于记录数据的生成时间,而 key 和...
Producer向Leader写入数据,Follower则通过拉取的方式从Leader同步数据。 - **日志紧凑性(Log Compaction)**:对于不需要保留历史记录的Topic,可以启用Log Compaction特性,该特性可以删除已经消费的消息,减少存储...
- **Follower**:除了Leader外的其他副本被称为Follower,它们负责从Leader中复制数据。 **2. Producer**:生产者,负责向Kafka中发布消息。 - 生产者可以指定将消息发布到特定的Partition或由Kafka自动分配。 -...
每个分区都有一个唯一的分区ID,并且在集群中由一个领导副本(Leader)和多个跟随副本(Follower)组成,确保了数据的高可用性。如果领导副本失败,系统会自动选举新的领导者,保证服务不间断。 Kafka的消费者采用...
- **Replica Follower:** 跟随 Leader 同步数据的副本。 **其他术语:** - **LogEndOffset:** 表示 Replica 中最后一条消息的位置。 - **ISR(In-Sync Replicas):** 与 Leader 同步且保持数据一致性的 Follower...
- **ISR(In-Sync Replicas)**:ISR 是一组与 Leader 保持同步的副本,如果一个副本落后太多或宕机,它会被从 ISR 中移除,确保数据一致性。 - **LEO(Log End Offset)**:记录了副本日志的末尾位移,是衡量副本...
副本分为领导者(Leader)和追随者(Follower),其中Leader负责处理读写请求,而Follower则复制Leader的数据以实现数据同步,若Leader失效,则Follower可以取而代之。ISR表示所有与Leader保持同步的Follower的集合...
首领副本(Leader)负责接收和处理请求,而跟随者副本(Follower)则同步首领的数据。 4. **生产者(Producer)**:生产者是向Kafka发布消息的应用程序。它们可以选择将消息发送到特定分区或让Kafka自动决定。 5. ...
- Leader 负责所有读写请求,Follower 则实时从 Leader 中同步数据。 6. **Leader(领导者)**: - Leader 是每个 Partition 的主要活跃副本。 - 所有的读写请求都会通过 Leader 进行。 - 如果 Leader 失效,...
其余副本作为follower,负责与leader副本同步数据。当leader副本发生故障时,Kafka能够自动选举新的leader副本继续提供服务。 #### 五、Kafka架构 Kafka的核心组件包括Producer、Broker、Consumer以及ZooKeeper...
其中一个副本为leader,负责处理读写请求,其余副本为follower,同步leader的数据。当leader出现故障时,通过选举机制选出新的leader以保证系统的稳定运行。 **Kafka主要配置** Kafka提供了丰富的配置选项,以适应...
- **实时数据分析**:Kafka可以与流计算引擎(如Apache Flink、Apache Spark Streaming)结合,实现对实时数据流的分析和处理。 - **物联网(IoT)**:在物联网场景下,Kafka可以处理海量设备产生的数据,支持低延迟...
5. 分区(Partition):每个主题可以被划分为多个分区,分区是有序且不可变的,每个分区只有一个负责人(Leader),其他副本(Follower)负责数据备份。 三、安装与配置 1. 安装:解压 "kafka_2.11-2.1.0.tgz" ...
它建立在ZooKeeper同步服务之上,与Apache Storm和Spark等大数据处理框架集成良好,适用于实时流式数据分析。 Kafka中的数据以主题(Topic)的形式组织,它是特定类别消息流的名称。数据存储在主题中,而每个主题由...
- **ISR(In-Sync Replicas)**:同步副本集合,是指能够与Leader保持同步的Follower副本集合。 - **Offset**:每条消息在Partition中的唯一标识符,用于定位消息的位置。 - **Producer**:消息的生产者,负责向...
Kafka自学文档详细介绍了Apache Kafka,这是一款开源流处理平台,主要用于构建实时数据管道和流应用程序。Kafka以其高吞吐量和可扩展性而闻名,能够处理大量数据,并支持分布式系统环境。它由Scala和Java编写,能够...