Здравствуйте, коллеги.
Мы эксплуатируем кластер Kafka 3.6.1 (KRaft mode) с 9 брокерами и 3
отдельными контроллерами.
Аппаратные ресурсы брокеров: 24 CPU, 48 GB RAM.
Количество соединений: до ~80k одновременных.
------------------------------
*Конфигурация брокеров:*
group.initial.rebalance.delay.ms=0log.retention.check.interval.ms=30000
log.retention.hours=24
log.roll.hours=1
log.segment.bytes=1073741824
num.io.threads=24
num.network.threads=24
num.recovery.threads.per.data.dir=2
offsets.topic.replication.factor=3
socket.receive.buffer.bytes=-1
socket.request.max.bytes=10485760
socket.send.buffer.bytes=-1
transaction.state.log.min.isr=2
transaction.state.log.replication.factor=3zookeeper.connection.timeout.ms=10000
delete.topic.enable=true
replica.fetch.max.bytes=5242880
max.message.bytes=5242880
message.max.bytes=5242880
default.replication.factor=3
min.insync.replicas=2
num.replica.fetchers=2replica.fetch.wait.max.ms=500replica.lag.time.max.ms=30000controller.quorum.election.timeout.ms=2000controller.quorum.request.timeout.ms=4000
socket.listen.backlog.size=500
queued.max.requests=1000
------------------------------
*Проблема:*
Мы видим, что на некоторых брокерах метрика
kafka_network_processor_idle_percent периодически уходит в 0.
При этом:
-
CPU и RAM остаются свободными.
-
Лидеры партиций распределены равномерно.
-
Количество соединений тоже примерно одинаково между брокерами.
-
Общая нагрузка от продюсеров/консьюмеров не превышает нормальную.
-
Но мы заметили, что *в целом по кластеру очень много Metadata-запросов
от клиентов*.
Из-за этого создаётся впечатление, что именно metadata traffic «забивает»
network threads, хотя реальные продюсерские/консьюмерские операции не
нагружают систему.
------------------------------
*Что мы пробовали:*
-
Увеличивали количество потоков:
-
с num.network.threads=16 / num.io.threads=8
-
до 24 / 18
-
и далее 24 / 24.
-
Проверили распределение лидеров и клиентов — оно равномерное.
-
Проверили продюсеров и консьюмеров — нагрузка обычная.
------------------------------
*Вопрос:*
Почему отдельные брокеры «забиваются» по сетевым потокам при большом числе
metadata-запросов, даже при низкой общей нагрузке?
Какие параметры конфигурации или механизмы в Kafka могут помочь
ограничить/оптимизировать metadata-запросы клиентов, чтобы не блокировать
network threads?
Стоит ли смотреть в сторону quotas, лимитов соединений или иных настроек?
Спасибо.
Мы эксплуатируем кластер Kafka 3.6.1 (KRaft mode) с 9 брокерами и 3
отдельными контроллерами.
Аппаратные ресурсы брокеров: 24 CPU, 48 GB RAM.
Количество соединений: до ~80k одновременных.
------------------------------
*Конфигурация брокеров:*
group.initial.rebalance.delay.ms=0log.retention.check.interval.ms=30000
log.retention.hours=24
log.roll.hours=1
log.segment.bytes=1073741824
num.io.threads=24
num.network.threads=24
num.recovery.threads.per.data.dir=2
offsets.topic.replication.factor=3
socket.receive.buffer.bytes=-1
socket.request.max.bytes=10485760
socket.send.buffer.bytes=-1
transaction.state.log.min.isr=2
transaction.state.log.replication.factor=3zookeeper.connection.timeout.ms=10000
delete.topic.enable=true
replica.fetch.max.bytes=5242880
max.message.bytes=5242880
message.max.bytes=5242880
default.replication.factor=3
min.insync.replicas=2
num.replica.fetchers=2replica.fetch.wait.max.ms=500replica.lag.time.max.ms=30000controller.quorum.election.timeout.ms=2000controller.quorum.request.timeout.ms=4000
socket.listen.backlog.size=500
queued.max.requests=1000
------------------------------
*Проблема:*
Мы видим, что на некоторых брокерах метрика
kafka_network_processor_idle_percent периодически уходит в 0.
При этом:
-
CPU и RAM остаются свободными.
-
Лидеры партиций распределены равномерно.
-
Количество соединений тоже примерно одинаково между брокерами.
-
Общая нагрузка от продюсеров/консьюмеров не превышает нормальную.
-
Но мы заметили, что *в целом по кластеру очень много Metadata-запросов
от клиентов*.
Из-за этого создаётся впечатление, что именно metadata traffic «забивает»
network threads, хотя реальные продюсерские/консьюмерские операции не
нагружают систему.
------------------------------
*Что мы пробовали:*
-
Увеличивали количество потоков:
-
с num.network.threads=16 / num.io.threads=8
-
до 24 / 18
-
и далее 24 / 24.
-
Проверили распределение лидеров и клиентов — оно равномерное.
-
Проверили продюсеров и консьюмеров — нагрузка обычная.
------------------------------
*Вопрос:*
Почему отдельные брокеры «забиваются» по сетевым потокам при большом числе
metadata-запросов, даже при низкой общей нагрузке?
Какие параметры конфигурации или механизмы в Kafka могут помочь
ограничить/оптимизировать metadata-запросы клиентов, чтобы не блокировать
network threads?
Стоит ли смотреть в сторону quotas, лимитов соединений или иных настроек?
Спасибо.
Comments
Post a Comment