2016-12-07 2 views
1

Я хочу избежать отправки повторяющихся сообщений в тему Kafka.Проверьте наличие сообщения в теме Kafka

Каков идеальный способ его достижения?

Использование Java-клиент для Apache Кафки, есть в любом случае, чтобы проверить, существует ли сообщение перед вызовом KafkaProducer.send

Я имею в виду это doc

ответ

1

В настоящее время (Kafka 0.10.1), нет возможности иметь ровно одну раз доставку по почте с Kafka. Независимо от того, какое решение вы хотите сделать, всегда будет пробел, и вы можете получить либо потерянные сообщения, либо дубликаты.

Однако Kafka добавит idempotent producer (планируется для 0.10.2), что позволит избежать дублирования записей. Конечная дата выпуска 0.10.2 - beginning 2017.

+0

Это хорошая идея экспортировать данные из темы Кафка в БД и запрос, чтобы проверить ее существование? –

+0

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

0

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

+0

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

0

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

Возможно, вы захотите сделать это на стороне потребителя, а не на производителя, поскольку разные потребители могут использовать разные стратегии для устранения дублирования (и некоторые потребители могут просто терпеть дубликаты).

+0

Вопрос в том, чтобы писать в Кафку, а не во внешнюю систему. –

Смежные вопросы