【问题标题】:kafka consumer is not picking up the message from topic even though previous message manually committed即使先前的消息手动提交,kafka 消费者也没有从主题中获取消息
【发布时间】:2021-03-15 00:50:57
【问题描述】:

我在 Kafka 主题中有两条消息(假设偏移量 1 和 2),两条消息都放在同一个分区中(假设 p1)。

我的消费者应用程序是这样的:

我的消费者正在获取消息 1(从 patition 1 偏移 1)并向 Kafka 发送手动提交信号,然后等待 5 秒。

我的期望是自从提交信号进入 kafka,而我的线程 1 正在等待 5 秒,另一个消费者线程应该从分区 1 中获取消息 2 并在单独的线程中处理它。

但是,它不是这样工作的。它一个接一个地处理。只有在线程 1 完成 5 秒后,它才会从主题中获取第二条消息。

注意:我已确保将并行消费者的数量设置为多个(在我的情况下为 5,最大消费者池大小为 10)。

我做错了什么吗?有没有人遇到过类似的问题?如果有,解决办法是什么?

谢谢, 巴拉

【问题讨论】:

    标签: apache-kafka mule-component mulesoft


    【解决方案1】:

    每个分区一次只能由一个线程使用,并且该线程将继续等待(还有其他因素),直到触发重新平衡,然后再将该分区分配给不同的线程。

    将触发再平衡

    • 手动或
    • 当使用相同的消费者组添加新线程时或
    • 当其中一个线程停止调用 poll 方法达 max.poll.interval.ms 很多毫秒(默认为 5 分钟)时

    Here 是一个包含更多详细信息的博客。

    【讨论】:

    • 感谢您的回复。我可以知道手动提交是什么意思吗?我的理解是,当执行手动提交时,它承认 Kafka 我已经完成了当前的消息/记录,并给了我来自主题的下一个(如果有的话)。
    • 是的,它会给你下一条不在其他线程中的消息,一个分区一次只能被一个线程消耗。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-01-07
    • 2017-10-07
    • 2017-03-19
    • 2018-07-27
    • 1970-01-01
    • 2018-06-14
    • 2018-12-15
    相关资源
    最近更新 更多