我们有以 BATCH 模式运行的 Spring Stream Listener。每个批处理的处理时间约为 3 ms。以下是我们的配置:
allow.auto.create.topics = true
auto.commit.interval.ms = 100
auto.offset.reset = earliest
connections.max.idle.ms = 540000
default.api.timeout.ms = 60000
enable.auto.commit = false
fetch.max.bytes = 5242880
fetch.max.wait.ms = 300000
fetch.min.bytes = 2097152
heartbeat.interval.ms = 3000
isolation.level = read_uncommitted
max.partition.fetch.bytes = 1048576
max.poll.interval.ms = 300000
max.poll.records = 500
metadata.max.age.ms = 300000
receive.buffer.bytes = 65536
reconnect.backoff.max.ms = 1000
reconnect.backoff.ms = 50
request.timeout.ms = 330000
retry.backoff.ms = 100
我们看到以下行为
May 23, 2020 @ 23:43:48.572 Consumed 463 messages
May 23, 2020 @ 23:43:47.791 Consumed 500 messages
--- 5 mins Gap ---
May 23, 2020 @ 23:38:47.764 Consumed 17 messages
May 23, 2020 @ 23:38:47.386 Consumed 500 messages
May 23, 2020 @ 23:38:46.989 Consumed 500 messages
May 23, 2020 @ 23:38:46.540 Consumed 500 messages
--- 5 mins Gap ---
May 23, 2020 @ 23:33:46.514 Consumed 106 messages
May 23, 2020 @ 23:33:46.155 Consumed 500 messages
May 23, 2020 @ 23:33:45.785 Consumed 500 messages
May 23, 2020 @ 23:33:45.358 Consumed 500 messages
如上所示,在我们收到下一组消息之前,我们看到了 5 分钟的间隔;这种模式仍在继续。
我们在 Kafka 分区中有大量消息等待处理。因此,不乏现成的消息。
不知道为什么我们反复获得 5 分钟的静默 - 我们将最大轮询等待/轮询间隔设置为 5 分钟。这应该没问题,因为 500 的最大轮询记录可以在轮询时立即得到满足。
获取最小字节为 2 MB,最大字节为 5 MB;这又可以通过我们拥有的消息数量来满足。
请让我知道我错过了什么。