Вопрос о переносе событий с редиса на кафку - PullRequest
0 голосов
/ 30 сентября 2018

У меня есть вопрос, связанный с сложной ситуацией в системе, управляемой событиями, которую я хочу попросить совета.Вот ситуация:

В нашей системе я использую redis в качестве базы данных memcached и kafka a в качестве очередей сообщений.Чтобы повысить производительность redis, я использую lua scripting для обработки данных и в то же время помещаю события в список блокировки redis.Затем будет процесс, чтобы выбрать события redis в этом списке блокировки и переместить их в kafka.Таким образом, в этом процессе есть 3 шага:

1) Чтение событий из списка redis
2) Создание пакета в kafka
3) Удаление соответствующих событий в redis

К сожалению, если процесс умирает между 2 и 3, то есть после генерации всех событий в kafka он не удаляет соответствующие события в redis, а после перезапуска этого процесса он генерирует дублированные события в kafka, что недопустимо.Как и у любого есть решение этой проблемы.Заранее спасибо, я действительно ценю это.

1 Ответ

0 голосов
/ 30 сентября 2018

Kafka склонен к событиям повторной обработки, даже если они записаны ровно один раз. Повторная обработка почти наверняка будет вызвана перебалансировкой клиентов.Перебалансировка может быть вызвана:

  • Модификация разделов в теме.
  • Перераспределение серверов и последующая временная недоступность клиентов.
  • Медленное использование сообщений и последующее восстановлениеклиента от брокера.

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

...