V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
hackingwu
V2EX  ›  程序员

spring kafka 使用的一个问题

  •  
  •   hackingwu ·
    hackingwu · 2021-05-11 19:19:48 +08:00 · 1453 次点击
    这是一个创建于 1292 天前的主题,其中的信息可能已经有所发展或是发生改变。

    spring kafka listener 设置手动 ACK,测试没有 ACK,本以为会一直重复收到那条没有 ACK 的消息。 实际却没有,但是可以收到新的消息,重启以后 也没有收到就消息。 用./kafka-consumer-groups.sh --bootstrap-server kafka-cluster:9092 --describe --group xxxx 查看,的确没有提交偏移量,lag 越来越大。这是为什么?

    5 条回复    2021-05-12 12:30:54 +08:00
    hackingwu
        1
    hackingwu  
    OP
       2021-05-11 19:42:05 +08:00
    是本因为本地也有存一个 offset,对吗?那我应该怎么测试?
    amwyyyy
        2
    amwyyyy  
       2021-05-12 11:02:39 +08:00
    没有回复 ack 服务端不知道已经消费了,默认是不会消费失败重试的,需要配置 SeekToCurrentErrorHandler 。
    skyleft
        3
    skyleft  
       2021-05-12 11:43:13 +08:00
    没提交 offset 的话,当前的消费者是会继续向下消费的,重新初始化消费者就可以收到了
    hackingwu
        4
    hackingwu  
    OP
       2021-05-12 12:00:16 +08:00
    1. client 在内存里也维护一个 offset,失败了没有 ACK, 还是会继续消费的,除非自己主动 seek 到出错的 offset,类似 SeekToCurrentErrorHandler 。
    2. 重新启动了会继续从服务端的 offset 开始消费,我本地是没有从服务端的 offset 开始消费,是因为我本地的数据被删除,我的 offset 对应的是不存在,那么就按照 auto.offset.reset = latest 继续消费,所以我又遇到重启以后没有收到消息的。
    hackingwu
        5
    hackingwu  
    OP
       2021-05-12 12:30:54 +08:00
    @hackingwu 如果 1~4 失败,5 成功了,那么 1~4 就不会重新消费了。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2747 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 81ms · UTC 14:53 · PVG 22:53 · LAX 06:53 · JFK 09:53
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.