Size: a a a

2019 December 27

DL

Dmitry Last in pro.kafka
Hi Guys,
would appreciate any help regarding the following issue:

3 instance Apache Kafka 2.11 cluster (k8s, statefulset)
KAFKA_HEAP_OPTS -Xms2048M -Xmx2048M
each VM: 4CPU, 26Gb RAM

the essence of issue: under the load constantly growing memory consumption on only 1 instance (mostly kafka-0) and as a result periodically restarts due to OOM reason. When the cluster idle the memory is still not freed.

the questions: why only one instance is under the memory pressure? and what we have to pay attention for to stabilize cluster under the load?
источник

A

Alex in pro.kafka
мемори дамп и посмотреть где течёт

Но 2гб это не так уж и много для кафки под нагрузкой
источник

DL

Dmitry Last in pro.kafka
с HEAP size проблем нет, под нагрузкой постоянно растет потребление RAM
источник

DL

Dmitry Last in pro.kafka
если снять нагрузку и подождать например сутки - память не освобождается
источник

A

Alex in pro.kafka
Так на каждый коннекшер по буферу на прием-отправку

Каждый in flights запрос тоже память кушает

Но вообще я бы посоветовал дождаться оом и чтобы он на падении сделал дамп

2гб в mat влазит на раз
источник

NV

Nikita Vilunov in pro.kafka
Привет, можно ли джавовыми продьюсерами атомарно записать N сообщений в один топик по одному ключу не пользуясь транзакциями?
источник

A

Alex in pro.kafka
Если только извратиться чтобы они одним батчем ушли
источник

A

Alex in pro.kafka
Сразу заполняется буфер, потом сжатие, и одним большим куском уходит в кафку
источник

NV

Nikita Vilunov in pro.kafka
И кафка их запишет атомарно?
источник

A

Alex in pro.kafka
Но рассчитывать на потоке чтоб такое будет я бы не стал
источник

A

Alex in pro.kafka
Ну для неё это все одно сообщение, поэтому и говорю что изврат
источник

NV

Nikita Vilunov in pro.kafka
Поток? Это будет делаться довольно редко и не в стримовой обработке
источник

NV

Nikita Vilunov in pro.kafka
Окей, а как так извратиться? Просто батчевание где-то в нутрах скрыто, я так понимаю
источник

A

Alex in pro.kafka
Да :)
источник

A

Alex in pro.kafka
Только зачем вам извращаться если уже давно транзакции в кафке?
источник

NV

Nikita Vilunov in pro.kafka
У нас питоновые консьюмеры с librdkafka, не поддерживающей транзакции
источник

NV

Nikita Vilunov in pro.kafka
Не поддерживающей isolation = read-commited, точнее
источник

A

Alex in pro.kafka
А вот за сишные кишки я не ручаюсь, по иде как и в java, но уверен есть нюансы
источник

NV

Nikita Vilunov in pro.kafka
Продьюсеры-то джавовые, там транзакции поддерживаются, прост консьюмеры все равно не поймут
источник

A

Alex in pro.kafka
Самый просто ответ:
Флаш перед записью,
Буфер чтобы вы все записи могли в него закинуть
Флаш после этого

Они уйдут одним батчем (wrapped message) но вот как у вас они появятся а вашем консьюмере хз

Если в буфер пролезет то окажутся сразу все, нет перепакуются на брокере

В общем очень много НО завязанных на предположения ниже лежащего протокола,

Я бы прод с такими ограничениями не шёл, будешь бояться любого изменения
источник