1

Я только что начал с Apache Kafka и действительно попытаюсь выяснить, как я могу создать свою систему, чтобы использовать ее надлежащим образом.Apache kafka отправка сообщений и балансировка Загрузка

Я строю систему, которая обрабатывает данные, и фактически мой кусок данных - это задача (объект), которую необходимо обработать. И объект знает, как его можно обработать, так что это не проблема.

Моя система фактически разделена на 3 основных компонента: Издатель (код, который запускает задачи), транспорт - фактически кафка и набор Потребителей - на самом деле это рабочие, которые просто извлекают данные из очереди, обрабатывают их как-то. Важно отметить, что потребитель может быть самим издателем, если его задача требует двухэтапного вычисления (потребитель просто создает задачи и отправляет их обратно на транспорт)

Итак, мы можем начать с идеи, что у меня есть 3 сервера: 1 сингл корневой издатель (сервер kafka также работает там) и 2 сервера потребителей, которые фактически выполняют задачи. Рабочий процесс данных выглядит следующим образом: Publisher создаёт задачу, помещает ее в transposrt, а один из потребителей берет эту задачу из очереди и обрабатывает ее. И будет хорошо, если каждый потребитель будет обрабатывать те же самые задачи, что и другие (так что рабочая нагрузка распределяется между потребителями).

Какой шаблон конфигурации kafka мне нужно использовать для этого случая? У кафки есть некоторые функции балансировки сообщений, или мне нужно создать 2 раздела, и каждый потребитель будет привязан только к отдельным разделам и может потреблять данные только из этого раздела?

ответ

1

В kafka количество разделов грубо переводится в параллелизм системы.

Общий совет - создать больше разделов для каждой темы (например, 10), а при создании потребителя указать количество потребительских потоков, соответствующих количеству разделов.

В процессе создания потребителя вы можете указать количество потоков (потоков) для создания темы. Предположим, что вы создаете 10 разделов, и вы запускаете потребительский процесс с одной машины, вы можете дать topicCount как 10. Если вы запускаете потребительский процесс с 2 серверов, вы можете указать topicCount как 5.

См. Это link

The createMessageStreams call registers the consumer for the topic, which results in rebalancing the consumer/broker assignment. The API encourages creating many topic streams in a single call in order to minimize this rebalancing.

Также вы можете динамически увеличено количество разделов, используя kafka-add-partitions.sh команду под Кафка/бункером. После увеличения разделов вы можете перезапустить процесс потребительского с увеличением topicCount

Кроме того, при производстве следует использовать KeyedMessage класс, основанный на какой-то случайный ключе внутри вашего объекта сообщения, так что сообщения будут равномерно распределены по различным разделам

+0

Где определить темуCount? – gillyb

+0

В методе createMessageStreams задайте тему -> topicCount как карта. например, Map (topic1 -> 10). См. Ссылку http://kafka.apache.org/documentation.html#highlevelconsumerapi –

Смежные вопросы