Динамическое подключение входного потока Kafka к нескольким выходным потокам

Есть ли в Kafka Streams встроенная функция, позволяющая динамически соединять один входной поток с несколькими выходными потоками? KStream.branch разрешает ветвление на основе предикатов истина / ложь, но это не совсем то, что я хочу. Я бы хотел, чтобы каждый входящий журнал определял тему, в которую он будет транслироваться во время выполнения, например, журнал {"date": "2017-01-01"} будет передаваться в тему topic-2017-01-01, а журнал {"date": "2017-01-02"} будет передаваться в тему topic-2017-01-02.

Я мог бы вызвать forEach в потоке, а затем написать продюсеру Kafka, но это кажется не очень элегантным. Есть ли лучший способ сделать это в рамках Streams?


person kellanburket    schedule 22.01.2017    source источник
comment
Что вы имеете в виду, говоря на основе строки - btw: KStream.branch принимает несколько предикатов (ваш вопрос указывает на то, что вы это пропустили). Итак, branch должен позволять делать то, что вы хотите. Может, можно привести пример данных?   -  person Matthias J. Sax    schedule 23.01.2017
comment
Я должен быть более ясным. Я знаю, что для этого требуется несколько предикатов - это было бы прекрасным решением, если бы у меня было фиксированное количество тем, на которые я хотел бы транслировать. Однако я хочу написать в темы с именем foo-{date}.   -  person kellanburket    schedule 23.01.2017


Ответы (1)


Если вы хотите динамически создавать темы на основе ваших данных, в настоящее время вы не получаете никакой поддержки в Streaming API Kafka (v0.10.2 и ранее). Вам нужно будет создать KafkaProducer и реализовать свою динамическую «маршрутизацию» самостоятельно (например, используя KStream#foreach() или KStream#process()). Обратите внимание, что вам необходимо выполнять синхронную запись, чтобы избежать потери данных (которые, к сожалению, не очень производительны). Планируется расширить Streaming API динамической маршрутизацией тем, но в настоящее время нет конкретных сроков для этой функции.

Вы должны принять во внимание еще одно соображение. Если вы заранее не знаете свою целевую тему (темы) и просто полагаетесь на так называемую функцию «автоматического создания темы», вы должны убедиться, что эти темы создаются с желаемыми настройками конфигурации (например, количеством разделов или фактор репликации).

В качестве альтернативы «автоматическому созданию тем» вы также можете использовать клиент администратора (доступный с v0.10.1) для создания тем с правильной конфигурацией. См. https://cwiki.apache.org/confluence/display/KAFKA/KIP-4+-+Command+line+and+centralized+administrative+operations

person Matthias J. Sax    schedule 23.01.2017
comment
Не могли бы вы дать нам ссылку на планы маршрутизации динамических тем - я хотел бы следить за прогрессом - спасибо - person AutomatedMike; 22.03.2017