Возможно ли достичь # 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.