Обработка сообщений Atomi c в кафке - PullRequest
1 голос
/ 09 июля 2020

Я хочу знать рекомендуемый способ обработки сообщений на kafka topi c в режиме atomi c, поэтому, например, предположим, что производитель kafka публикует несколько сообщений с ключами k1, k2, k3, и теперь я хочу обрабатывать их атомарно и сообщать моему приложению об этих сообщениях вместе. Для достижения этого может быть некоторая работа, например, передать идентификатор и подсчитать вместе со всеми сообщениями, которые необходимо обработать вместе, чтобы клиент ждал, пока он не получит все сообщения, входящие в одну группу. Есть ли другой рекомендуемый способ решения таких проблем с помощью kafka, то есть возможность атомарной обработки пакета сообщений, чтобы можно было поддерживать согласованность между ключами. Предоставляет ли потребитель кафки такую ​​возможность?

1 Ответ

1 голос
/ 09 июля 2020

Аспекты, которые необходимо учитывать при производстве

  • В Kafka или любом другом брокере сообщений нет атомарности между производителем и потребителем.
  • Итак, когда производитель отправляет сообщения, у вас должен быть какой-то идентификатор взаимосвязи как часть сообщения, чтобы потребители знали, какие сообщения принадлежат одной группе.
  • Но знания, какие сообщения принадлежат вместе, недостаточно для потребителя , он также должен знать, когда считать, что сообщения принадлежат определенной группе, полностью собраны, чтобы он мог начать обработку группы. До сих пор пример, если это группы фиксированного размера, вам не нужно отправлять какой-либо размер группы как часть сообщения, в противном случае вам нужно либо добавить размер группы, либо что-то еще в созданном сообщении, которое сигнализирует потребителю, что группа завершена .
  • Вы также должны создать сообщения, принадлежащие одной группе к одному и тому же разделу.

Теперь у вас есть базовые c потребности удовлетворены, для остальной работы вы можете выбрать разные пути.

  • Например, вы можете использовать что-то вроде camel-kafka и aggregator EIP, чтобы использовать этот топи c и писать в другой топи c где каждая запись - это все групповое сообщение, и тогда вы знаете, что можете потреблять из этого топи c атомарно
...