【问题标题】:Kafka not sending enough messages to consumer卡夫卡没有向消费者发送足够的消息
【发布时间】:2020-06-22 20:12:58
【问题描述】:

我有一个 kafka 主题,3 个分区,只有一个带有批处理的消费者。我在消费者端使用 spring kafka 并带有以下消费者道具:

max.poll.records=10000
fetch.min.bytes=2000000
fetch.max.bytes=15000000
fetch.max.wait.ms=1000
max.poll.interval.ms=300000
auto.offset.reset.config=earliest
idle.event.interval=120000

即使队列中有数千条消息(GB 的数据)在等待,kafka 消费者在每次轮询时仍会收到大约 10 条消息(总大小约为 1MB)。消费者应该获取批量 fetch.max.bytes(in my prop ~15MB) 或 max.poll.records (10000 in my case) 。有什么问题?

【问题讨论】:

    标签: apache-kafka spring-kafka


    【解决方案1】:

    有几种情况可能会导致这种情况,请进行以下更改:

    1. 增加fetch.min.bytes——消费者也可以批量获取fetch.min.bytes,即1.9MB。
    2. 增加fetch.max.wait.ms- 轮询函数等待fetch.min.bytesfetch.max.wait.ms 触发,无论哪个先发生。
      fetch.max.wait.ms 在您的配置中为 1 秒,听起来不错,但只需增加它即可以防这是问题所在。
    3. 增加max.partition.fetch.bytes- 默认为 1MB,它可以减少像你这样的小分区主题的轮询大小(对于单个消费者的 3 个分区主题的轮询限制为 3MB)。

    尝试使用这些值:

    fetch.min.bytes=12000000
    fetch.max.wait.ms=5000  
    max.partition.fetch.bytes=5000000  
    

    深入解释:
    https://www.oreilly.com/library/view/kafka-the-definitive/9781491936153/ch04.html

    【讨论】:

    • 很有趣,我读了这本书,除了 max.partition.fetch.bytes 之外,数字与您的建议相同,我想我完全忘记了。谢谢!
    • 增加 max.partition.fetch.bytes 显着增加了发送给消费者的消息数量。
    猜你喜欢
    • 2020-07-24
    • 1970-01-01
    • 2021-01-26
    • 2017-05-11
    • 1970-01-01
    • 1970-01-01
    • 2020-03-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多