Как реализовать параллелизм в кафке с использованием потребителей nodejs?

Теоретически говоря, поскольку nodejs является однопоточным, как я могу добиться параллелизма, когда я определяю несколько потребителей для увеличения пропускной способности?

Например, если у меня есть тема kafka с 4 разделами, на стороне потребителя, как я смогу использовать 4 сообщения параллельно при использовании с nodejs. В лучшем случае я могу добиться параллелизма с помощью однопоточного цикла обработки событий.

Одним из возможных решений было бы разветвление дочерних процессов (в данном случае 3), чтобы каждый процесс мог получать сообщения из определенного раздела, если в системе 3 незанятых ядра. Но насколько эффективным будет этот подход?

Как лучше всего этого добиться?

1 ответ

В Kafka разделы - это уровень параллелизма. Кроме того, чем больше разделов в кластере Kafka, тем более высокой пропускной способности можно достичь.

Тема Kafka разделена на несколько разделов, что обеспечивает параллелизм путем разделения данных между несколькими брокерами. Несколько разделов позволяют нескольким потребителям читать из раздела параллельно. Следовательно, чтобы добиться параллельной обработки, вам необходимо разбить тему на несколько разделов.

Чтобы увеличить количество разделов существующей темы, вы можете просто запустить

bin/kafka-topics.sh \
    --zookeeper localhost:2181 \
    --alter \
    --topic topicName \
    --partitions 40

Однако существующие данные не будут перемещены


Примечание о потребителях, группах потребителей и разделах.
Если у вас есть N разделов, вы можете иметь до N потребителей в одной группе потребителей, каждый из которых читает из одного раздела. Когда у вас меньше потребителей, чем разделов, некоторые из них будут читать из более чем одного раздела. Кроме того, если у вас больше потребителей, чем разделов, некоторые из них будут неактивны и вообще не будут получать сообщения.

Другие вопросы по тегам