Потребление из нескольких тем с использованием одного потока kafka - PullRequest
0 голосов
/ 18 июня 2020

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

Возможно ли достичь №1? и если да, каковы последствия? и если я использую настройки EXACTLY_ONCE, какие сложности это принесет?

версия kafka: 2.2.0-cp2

1 Ответ

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

Возможно ли достичь # 1 (один поток kafka, потребляющий из нескольких тем)

Да, вы можете использовать StreamsBuilder # stream (Коллекция тем)

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

Это похоже на подписку одного потребителя на все эти темы, что также означает одну ветку для использования всех тем. Когда вы вызываете poll(), он возвращает ConsumerRecords из всех тем, на которые вы подписаны, а не только из одной топи c.

В потоках Kafka есть термин под названием Topology, который в основном представляет собой acycli. c график источников, процессоров и стоков. Топология может содержать суб-топологии.

Субтопологии затем могут выполняться как независимые потоковые задачи через параллельные потоки ( Ссылка )

Поскольку каждая топология может иметь источник , который может быть топи c, и если вы хотите параллельную обработку этих тем, вам нужно разбить свой график на субтопологии.

Если я использую настройки 'EXACTLY_ONCE' , какие сложности это принесет?

Когда сообщения достигают приемника процессора в топологии, тогда его источник должен быть зафиксирован, где источник может быть один топи c или набор тем.

Несколько тем или один топи c, нам нужно отправить смещения транзакции от производителя, что в основном Map<TopicPartition, OffsetMetadata>, которое должно быть зафиксировано когда создаются сообщения.

Итак, я думаю, что он не должен привносить какие-либо сложности , будь то одиночные топи c с 10 разделами или 10 тем с 1 partitio n каждое, потому что смещение находится на уровне TopicPartition , а не на уровне topi c.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...