2014-12-22 2 views
0

У меня есть тема под названием Topic1 с двумя разделами. Предположим, что serverA является лидером для Topic1, partition1 и serverB является подписчиком.поток сообщений производителя Kafka

Что произойдет, если в моем клиенте опубликую до serverB (в брокере.list укажу только serverB)? Как распространяется сообщение? Он отправляется серверу B, а затем серверу.

ответ

1

Чтобы опубликовать сообщение в разделе, клиент сначала найдет лидера раздела из Zookeeper и отправит сообщение лидеру. Лидер записывает сообщение в свой локальный журнал. Каждый последователь постоянно вытягивает новые сообщения от лидера, используя один канал сокета. Последователь записывает каждое полученное сообщение в свой собственный журнал и отправляет подтверждение лидеру. После того, как лидер получает подтверждение от всех реплик в ISR, сообщение совершаются

Так, чтобы ответить на ваш вопрос, если клиент публикует в ServerB, консультируется зоопарк знать лидер для Topic1 и Partition1. Zookeeper отвечает, что серверA является лидером для раздела1. Таким образом, клиент отправляет сообщение серверу A. (Здесь я предположил, что разделитель отправит сообщение в раздел1.)

Все эти данные обрабатываются производителем kafka. Для конечных пользователей не нужно беспокоиться об этих деталях.

Вы можете прочитать больше об этом here

1

Я нашел document быть очень полезным в объяснении того, что происходит внутри с Кафкой.

Существует API, используемый производителем для запроса любого сервера Kafka для списка разделов и всех метаданных для этих разделов. Эти метаданные включают лидера-брокера для каждого раздела. Производитель вызывает секвенсор, чтобы получить целевой раздел, а затем напрямую разговаривает с лидером брокера Kafka этого раздела, чтобы написать сообщение на этот раздел. Лидер будет поддерживать связь с любыми другими брокерами, управляющими репликами раздела.

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