Поведение потребителя Кафки, когда один потребитель падает / падает
В моих темах 115 разделов и около 130 потребителей. Я ожидаю, что 115 потребителей в активном состоянии (назначение 1 к 1) и остальные 15 потребителей в состоянии ожидания.
Несколько раз я наблюдал высокую память и JVM в зависшем состоянии, из-за чего происходит перебалансировка. Тем не менее, я не уверен, вызывает ли это полную перебалансировку (то есть, исправные назначения узлов также изменяются??), или только назначенные разделы мертвого узла назначаются одному из свободных узлов?
Кроме того, как происходит перебалансирование в случае перезапуска приложения (у меня распределенная 1 нить / потребитель на JVM)? Поскольку узлы запускаются один за другим (повторяющийся перезапуск), произойдет ли перебалансирование 115 раз (т. Е. Каждый раз, когда новый потребитель присоединяется к группе), или будет применен некоторый порог / ожидание до начала перебалансировки (чтобы обеспечить все исправные узлы) присоединиться к приложению)?
2 ответа
Изменение баланса потребителя инициируется каждый раз, когда потребитель Kafka с тем же идентификатором группы присоединяется к группе или покидает ее. Выход из группы потребителей может быть выполнен явным образом путем закрытия соединения с потребителем или по таймауту в случае сбоя JVM или сервера.
Так что в вашем случае, да, повторный перезапуск потребителей вызовет 115 перебалансировок потребителей. Не существует "порога" или "периода ожидания" до начала восстановления баланса в Кафке.
По умолчанию используется RageAssignor.java, что может привести к тому, что даже здоровые потребители будут снова и снова назначать им разные разделы, когда что-то происходит с другим узлом. Это также может означать, что раздел будет взят у здорового потребителя. Вы можете настроить его так, чтобы он использовал разные реализации PartitionAssignor
interface - например StickyAssignor.java"Одно преимущество липкого присваивателя состоит в том, что, как правило, оно уменьшает количество разделов, которые фактически перемещаются от одного потребителя к другому во время переназначения".
Я также рекомендовал бы прочитать https://medium.com/@anyili0928/what-i-have-learned-from-kafka-partition-assignment-strategy-799fdf15d3ab если вы хотите совершить глубокое погружение, как оно работает под водой