Kafka概述
1.什么是偏移量:
-
在 Kafka 中,每个分区的消息都会被分配一个唯一的偏移量(
offset
)。偏移量简单来说就是消息在分区中的位置标识。 -
偏移量从 0 开始递增,每条消息的偏移量都会比前一条消息的偏移量大 1。
-
消费者通过跟踪每个分区的偏移量来记录自己消费的进度,以便在重新启动或重试时能够准确地从上次停止的位置继续消费消息。
2.偏移量的作用:
(1)记录消费位置:
- 消费者通过提交偏移量来告知 Kafka 自己已经成功消费了一批消息,Kafka 将会记录这个偏移量,以便在消费者重新加入时能够准确地从上次停止的位置继续消费。
(2)确保消息传递:
- Kafka 使用偏移量来确保消息被传递一次且仅一次。
- 消费者可以通过控制偏移量的提交来避免重复消费消息。
(3)容错和恢复:
- 偏移量的存在使得消费者在发生故障或重启后能够准确地从中断的位置继续消费消息,而不会造成数据丢失或重复消费。
3.offset的默认维护位置
- __consumer_offsets主题里面采用key和value的方式存储数据。
- key是group.id+topic+分区号,value就是当前offset的值。
- 每隔一段时间,kafka内部会对这个topic进行compact,也就是每个group.id+topic+分区号就保留最新数据。
4.偏移量的管理:
(1)自动提交:
- 消费者可以选择开启自动提交偏移量的功能,让 Kafka 在后台自动管理偏移量的提交。
- 这种方式简化了偏移量的管理,但可能会导致一些问题,如消息重复消费。
(2)手动提交:
- 消费者也可以选择手动提交偏移量,以更精确地控制偏移量的提交时机。
- 手动提交偏移量可以在处理每条消息后立即提交,也可以在一批消息处理完成后批量提交。
5.指定Offset消费
5.漏消费和重复消费
-
重复消费:已经消费了数据,但是offset没提交。
-
漏消费:先提交offset后消费,有可能会造成数据的漏消费。
怎么能做到既不漏消费也不重复消费呢?详看消费者事务。
6.消费者事务
7.数据积压
偏移量在 Kafka 中起着非常重要的作用,它不仅记录了消费者消费消息的位置,还确保了消息的传递和消费者的容错恢复能力。消费者需要适时地提交偏移量,以确保消费进度能够正确记录并在需要时能够准确地恢复。