kafka多个消费者消费一个topic消费的数据是一样吗 kafka 一个topic 多个消费者_kafka

Producer:生产者,也就是产生消息的一方,生产者负责创建消息然后投递到kafka中


Consumer:消费者,也就是接受消息的乙方,消费者连接到kafka上并接受消息,进而进行相应的业务逻辑处理

Consumer Group:多个消费者可以组成一个消费组,

在kafka的设计中,一个分区的数据只能被同一个消费者组的一个消费者消费。

同一个消费者组的消费者可以消费同一个topic的不同分区的数据

Broker:broker可以看做一个kafka实例或者kafka服务节点,每个服务器上可以有一个或多个broker。在kafka集群内的每个broker都有一个唯一的编号

Topic:消息的主题,每个broker上可以创建多个topic,一个topic可以横跨多个broker,kafka中的消息以topic进行分类,发送到kafka的每一个消息都要指定一个topic,消费者则负责订阅topic并消费。

Partition:topic的分区,主题事业观逻辑上的概念,它还可以细分为多个分区。同一主题在不同分区的数据是不重复的,分区的表现形式就是一个个的文件夹(topic name - partition id),分区数据的存储则可以看做一个可追加的日志(log)文件

kafka多个消费者消费一个topic消费的数据是一样吗 kafka 一个topic 多个消费者_数据_02

offset:偏移量,消息在被追加到分区的log文件的时候都会分配一个偏移量offset,这是消息在分区内的唯一表示,他可以保证消息在分区内是有序的,但他不是跨分区的(也就是说kafka可以保证分区有序而不是主题有序)



**replication**:每一个分区都有多个副本,通过增加副本的数量可以提升容灾能力,副本之间是“一主多从”的关系,当主分区(Leader)故障的时候会选择一个备胎(Follower)上位成为新的Leader。副本处于不同的broker中 ,同一机器统一分区只能存放一个副本(包括自己),所以副本的最大数量不能大于broker的数量

kafka多个消费者消费一个topic消费的数据是一样吗 kafka 一个topic 多个消费者_数据_03

分区中所有的副本的统称为AR(Assign Replicas)

与Leader保持一定同步的副本(包括Leader副本)组成ISR(In-Sync Replicas)

与Leader副本同步滞后过多的副本组成OSR(Out-of-Sync Replicas)

也就是说AR = ISR + OSR

正常情况下 AR = ISR ,OSR为空

默认情况下当Leader副本故障时,只有ISR中的副本才有资格成为下一个Leader(可配置的)



LSO(LogStartOffset)起始offset

LEO(LogEndOffset)将要写入的offset

HW(High Watermark)ISR集合中最小的LEO,消费者只能拉取到HW这个offset之前的消息

kafka多个消费者消费一个topic消费的数据是一样吗 kafka 一个topic 多个消费者_kafka_04

为便于理解举个简单的例子:

1.此时Leader和两个follower消息是同步的,并且生产者写入消息3,4

kafka多个消费者消费一个topic消费的数据是一样吗 kafka 一个topic 多个消费者_偏移量_05

2.生产者写入完成后,两个follower开始同步消息

kafka多个消费者消费一个topic消费的数据是一样吗 kafka 一个topic 多个消费者_偏移量_06

3.但是两个follower的效率并不相同,

此时HW取最小值4,

Leader和follower1的LEO为5,

follower2的LEO为4

kafka多个消费者消费一个topic消费的数据是一样吗 kafka 一个topic 多个消费者_kafka_07

4.两个follower全部同步完成,此时HW = 5

kafka多个消费者消费一个topic消费的数据是一样吗 kafka 一个topic 多个消费者_偏移量_08