Коммитить только выходную тему в Kafka Streams

Я хочу создать приложение Kafka Streams, которое получает сообщения типа A. Для каждого входного A приложение должно создавать несколько групп выходных B (обычная операция flatMap).

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

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

Похоже, что Processor API может мне помочь, поскольку я могу управлять состоянием подкоммитов.

So,

  1. Есть ли смысл в этом дизайне? (ничего подобного не видел при поиске, поэтому я немного подозрительный)
  2. Как я могу программно подкоммитить? (т.е. фиксация только в выходной теме)

person Yotam Hochman    schedule 27.11.2018    source источник


Ответы (1)


Фиксация смещения в Kafka основана на входных сообщениях. Таким образом, если у вас есть одна входная запись, то есть flatMap на несколько выходных сообщений, вы не можете разделить фиксацию на несколько. Либо вы фиксируете входное сообщение, либо нет.

В Kafka нет концепции фиксации выходных сообщений.

person Matthias J. Sax    schedule 27.11.2018
comment
В этой статье описывается транзакционный производитель, который фиксирует свои сообщения, и потребитель настроенный с "isolation.level" -> "read_committed", будет опрашивать только зафиксированные сообщения производителя. Похоже, что это также реализовано в Kafka Streams. Разве я не могу использовать его для своих нужд? - person Yotam Hochman; 28.11.2018
comment
Наименьшая возможная транзакция - это если вы читаете одно сообщение и записываете все соответствующие выходные сообщения, а также фиксируете всю запись и смещение одновременно. Если вы зафиксируете частичную запись (то есть только некоторые выходные сообщения), это нарушит семантику EOS. - person Matthias J. Sax; 28.11.2018