【发布时间】:2020-05-27 16:49:23
【问题描述】:
我们有以BATCH模式运行的Spring Stream Listener。每批的处理时间约为3毫秒。以下是我们的配置:
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;这又可以通过我们拥有的消息数量来满足。
请让我知道我错过了什么。
【问题讨论】:
-
fetch.max.wait.ms = 300000fetch.min.bytes = 2097152- 暗示 max.wait 是问题,因为它正好是 5 分钟 - 您是否尝试减少它以查看行为是否发生变化(我知道您说过您认为您有足够的数据来满足它,但减少它可能有助于您的调查)。
标签: apache-kafka spring-kafka spring-cloud-stream-binder-kafka