Можно ли распределить разделы kafka между несколькими узлами кластера kafka? - PullRequest
1 голос
/ 18 июня 2020

В моем приложении есть список узлов кластера kafka, указанный в свойстве spring.kafka. bootstrap -servers, и он прослушивает темы на всех этих узлах.

Если бы я создал топи c на одном из этих узлов, скажем, с 5 разделами, будут ли эти разделы распределены между этими несколькими узлами или они будут созданы на одном узле? Кроме того, как я могу узнать, на каком узле фактически существует раздел topi c?

Ответы [ 2 ]

1 голос
/ 18 июня 2020

Фактически вы не создаете темы в одном конкретном узле c в кластере Kakfa. Когда вы отправляете запрос на создание топи c, разделы будут автоматически распределены по всем узлам, принадлежащим кластеру, и реплики также будут распределены. Именно так Kafka справляется с высокой доступностью. Если один из узлов не работает, другой узел имеет все необходимые данные, поэтому нет простоя или воздействия на пользователей кластера.

Вы можете выполнить команду --describe следующим образом:

> bin/kafka-topics.sh --describe --bootstrap-server localhost:9092 --topic my-replicated-topic

    Topic:my-replicated-topic   PartitionCount:1    ReplicationFactor:3 Configs:
        Topic: my-replicated-topic  Partition: 0    Leader: 1   Replicas: 1,2,0 Isr: 1,2,0

Это даст вам список разделов для вашего topi c, где они расположены, какой узел является лидером для этого раздела (тот, который потребители должны потреблять, когда им нужны данные из этого раздела). раздел), а также некоторую дополнительную информацию, такую ​​как In-Syn c Replica status или ISR, и коэффициент репликации.

Более подробная информация доступна в официальных документах Kafka здесь и здесь .

Имейте в виду, что когда ваш клиент подключается к bootstrap-server, он не указывает полный список брокеров , с которых следует читать данные . Он просто указывает одного (или нескольких) брокеров, от которых можно получить информацию о кластере . Когда клиент читает / записывает из заданного топа c и раздела, это делается непосредственно соответствующему брокеру, который хранит эти данные ( независимо от конкретных брокеров, указанных в bootstrap). Вы можете увидеть больше об этом процессе здесь и здесь .

0 голосов
/ 18 июня 2020

Как сказано в другом ответе, topi c не принадлежит и не создается для определенного узла, он создается для кластера в целом. Каждый раз, когда создается топи c, разделы делятся между узлами кластера. Каждый раздел имеет ведущий узел и узлы-реплики. Производители пишут на ведущий узел, а Kafka внутренне реплицирует данные на реплики. Потребители получают данные раздела от его ведущего узла.

Для лучшего понимания / визуализации распределения разделов topi c в Kafka вы можете использовать такие инструменты, как Kafdrop . Вы можете выполнить шаги в разделе readme репозитория для настройки. Вы можете скачать последнюю версию бинарного файла с здесь . В пользовательском интерфейсе вы можете увидеть ведущие и реплики узлов для каждого раздела топи c.

Настройка довольно проста, и я лично считаю этот инструмент ОЧЕНЬ полезным!

...