kafka消费者如何才能从头开始消费某个topic的全量数据
消费者要从头开始消费某个topic的全量数据,需要满足2个条件(spring-kafka):
(1)使用一个全新的"group.id"(就是之前没有被任何消费者使用过); (2)指定"auto.offset.reset"参数的值为earliest;
对应的spring-kafka消费者客户端配置参数为:
<!-- 指定消费组名 --> <entry key="group.id" value="fg11"/> <!-- 从何处开始消费,latest 表示消费最新消息,earliest 表示从头开始消费,none表示抛出异常,默认latest --> <entry key="auto.offset.reset" value="earliest"/>
注意:从kafka-0.9版本及以后,kafka的消费者组和offset信息就不存zookeeper了,而是存到broker服务器上,所以,如果你为某个消费者指定了一个消费者组名称(group.id),那么,一旦这个消费者启动,这个消费者组名和它要消费的那个topic的offset信息就会被记录在broker服务器上。
比如我们为消费者A指定了消费者组(group.id)为fg11,那么可以使用如下命令查看消费者组的消费情况:
bin/kafka-consumer-groups.sh --bootstrap-server 172.17.6.10:9092 --describe --group fg11
显示结果如下:
TOPIC PARTITION CURRENT-OFFSET LOG-END-OFFSET LAG CONSUMER-ID HOST CLIENT-ID friend 0 6 6 0 consumer-1-08c856a3-ae39-4f73-a2da-4de1795c6ad4 /192.168.207.127 consumer-1 friend 1 2 2 0 consumer-1-08c856a3-ae39-4f73-a2da-4de1795c6ad4 /192.168.207.127 consumer-1 friend 2 4 4 0 consumer-1-08c856a3-ae39-4f73-a2da-4de1795c6ad4 /192.168.207.127 consumer-1
其实friend这个topic共有3个分区,消息总数为12条,其实在消费者A启动之前,这12条消息已经被其他某个组的消费者消费过了。而我们虽然为消费者A指定了一个全新的group.id为fg11,但是如果我们在启动消费者A之前,指定的"auto.offset.reset"参数的值是latest而不是earliest的话(就算你停止消费者,然后改为earliest也是没有用的),启动之后它将不会消费以前的消息,除非friend这个topic的分区中有了新的消息它才会消费。
所以一定要在消费者启动之前就保证group.id是全新的,而且要指定earliest而不是latest。
如果觉得本文对您有帮助,不妨扫描下方微信二维码打赏点,您的鼓励是我前进最大的动力:
分类:
kafka
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架
2016-04-12 WebService框架CXF整合Spring小Demo完整源码【Eclipse项目】