Kafka没有向消费者发送足够的消息

时间:2020-03-10 21:08:23

标签: apache-kafka spring-kafka

我有一个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(在我的道具中约为15MB)或max.poll.records(在我的情况下为10000)的批次。有什么问题吗?

1 个答案:

答案 0 :(得分:2)

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

  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