предотвратить дублирование регистрации - PullRequest
0 голосов
/ 19 июня 2019

У меня есть много приложений по всему миру, которые отправляют данные на мой сервер.все данные производятся с использованием потока Kafka как авро в тему Kafka с 40 разделами. Я хотел бы предотвратить дублирование данных.в моем случае приложения могут отправлять одно и то же сообщение много раз (даже через несколько минут), и я хотел бы знать, может ли Кафка помочь мне предотвратить это.Есть ли какая-либо опция для «хеширования» сообщения и предотвращения его двойного производства для Kafka?

Я прочитал об этом ровно один раз и т. Д. Похоже, он поддерживает случай, когда производитель не смог произвести.

Мне бы хотелось, чтобы Кафка не допустил дублирования сообщений в течение ограниченного времени (скажем, 10 минут)

1 Ответ

0 голосов
/ 19 июня 2019

Если источником данных является приложение Streams, вы можете использовать оператор Suppress для буферизации и подавления дубликатов.

См .: https://kafka.apache.org/documentation/streams/developer-guide/dsl-api.html#controlling-emit-rate

Это предполагает, что дубликатыисходят из обновлений KTable.

Если вы хотите привести пример одного из вышеперечисленных приложений, я могу привести более конкретный пример, но в основном он выглядит так:

myKTable
  .suppress(untilTimeLimit(
    ofMinutes(10), 
    maxBytes(1_000_000).emitEarlyWhenFull()
  ))
  .to(...the output topic...)

ЕслиВы хотите предотвратить дубликаты, вы должны сделать что-то подобное на стороне производителя.С другой стороны, если вы просто хотите сохранить для хранения дубликатов, вы можете настроить сжатие журналов по рассматриваемым темам.

Надеюсь, это поможет!

-John

...