偏移量是主题/分区的属性还是消费者的属性?
如果它是消费者的属性,那么从同一分区读取的多个消费者可能具有不同的偏移量吗?
此外,如果消费者断开连接,Kafka如何知道它在处理重新上线的同一消费者?新的客户端ID会生成,所以它与之前的ID不同。
偏移量是主题/分区的属性还是消费者的属性?
如果它是消费者的属性,那么从同一分区读取的多个消费者可能具有不同的偏移量吗?
此外,如果消费者断开连接,Kafka如何知道它在处理重新上线的同一消费者?新的客户端ID会生成,所以它与之前的ID不同。
在大多数情况下,消费者组的属性是其所必须具备的。在编写消费者时,通常需要在group.id
参数中指定消费者组。该组ID用于从Kafka集群自身的特殊主题__consumer_offsets
中恢复/存储最新的偏移量。消费者组不仅用于偏移量,还用于确保每个分区只会被单个客户端从消费者组中消费。
然而,Kafka提供了很多灵活性 - 因此,如果您需要,可以将偏移量存储在其他地方,并且可以基于任何您想要的标准进行处理。但在大多数情况下,按照消费者组的概念并将偏移量存储在Kafka内部是您可以做的最好的事情。
Kafka根据消费者属性group.id
来识别消费者,每个消费者都应该有这个属性。
一个唯一的字符串,用于标识此消费者所属的消费者组。如果消费者使用
subscribe(topic)
或基于Kafka的偏移量管理策略,则需要此属性。
至于offset
,它是消费者属性和代理属性,每当消费者从kafka主题中消费消息时,它将提交偏移量(这意味着已经消费了1到10条消息),下次将从10开始消费,可以手动提交偏移量,也可以自动提交enable.auto.commit
如果为true,则消费者的偏移量将在后台定期提交。
每个消费者组都有自己的偏移量,基于此,kafka服务器识别新的消费者还是重启的旧消费者。