2016-02-08 4 views
0

У меня есть источник, откуда я получаю пакет сообщений. Эти сообщения должны быть добавлены в Кафку - надежно - без промахов и без повода.Есть ли способ атомизации серийного производства в кафке?

Если я использую продюсер aync, когда я помещаю много сообщений, мне интересно, если какой-либо раздел не работает некоторое время, он просто пропустит это сообщение и поместит следующее сообщение - это приведет к сообщению о не в порядке.

Есть ли способ, я могу сказать, что Кафка - производить серийный набор сообщений и либо атомарно передавать все, чтобы все провалить?

* Я не хочу производить синхронизацию, так как это сильно повлияет на пропускную способность.

ответ

0

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

Подробнее фона на ключи и разделы в официальной Кафка документации здесь: http://kafka.apache.org/documentation.html#intro_producers
http://kafka.apache.org/documentation.html#intro_consumers

+0

Эй, хотя я понимаю заказа часть, она до сих пор мне не ясно - как это может быть отправлен как атомная партия к кафке - не могли бы вы указать мне на пакетные API/документы, которые утверждают это? –

+0

@GuruprasadGV: Это зависит от реализации вашего продюсера. Обычно производители накапливают сообщения до тех пор, пока не достигнут определенного количества (min_messages) или определенного времени (linger_time), а затем их как пакет. Установив эти очень высокие значения, вы можете эффективно сказать производителю, что они накапливают все, а затем отправить его вручную с помощью метода flush (или аналогичного), как только вы будете готовы. –

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