Каждая запись будет отправлена ​​каждому предикату один раз - это концептуально широковещательная рассылка всем фильтрам, но записи не будут физически реплицированы, поэтому нет никаких накладных расходов памяти.

я есть одна основная тема и несколько предикатов, с каждым из которых связана выходная тема. Я хочу отправить каждую запись во ВСЕ темы, чей предикат разрешается в true. Я использую Luwak для проверки того, какие предикаты удовлетворяют записи (для использования этой библиотеки вы оцениваете документ со списком предикатов, и он сообщает вам, какие из них совпадают - то есть я вызываю его только один раз, чтобы получить список удовлетворенных предикатов).

Я пытаюсь использовать Kafka Streams для этого, но, похоже, нет подходящего метода для KStream (ветка KStream # направляет запись только в одну тему).

Один из возможных подходов заключается в следующем:

Stream from master
Map the values into a format with the original content and the list of matching predicates
Stream to an intermediate with-matches topic

For each predicate/output topic
    Stream from intermediate with-matches topic
    Filter "does list of matches predicates contain predicate ID"
    Map the values to just the original content
    Stream to corresponding output topic

Такая промежуточная тема кажется "неуклюжей", хотя. Есть лучшие предложения?

Я использую:

Кафка v0.10.1.1Luwak v1.4.0

Ответы на вопрос(1)

Ваш ответ на вопрос