2017-02-02 5 views
2

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

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

В kafka-console-producer.sh помощь, я вижу ниже:

--producer-property <producer_prop>  A mechanism to pass user-defined 
              properties in the form key=value to 
              the producer. 
--producer.config <config file>   Producer config properties file. Note 
              that [producer-property] takes 
              precedence over this config. 
--property <prop>      A mechanism to pass user-defined 
              properties in the form key=value to 
              the message reader. This allows 
              custom configuration for a user- 
              defined message reader. 

Можем ли мы контролировать раздел, где производитель будет писать на, используя этот --property вариант?

Также у потребителя высокого уровня мы можем контролировать, из какого раздела он будет потреблять? Как раздел присваивается потребителю?

+0

Используйте общий ключ при создании связанных событий для поддержания порядка в разделе: http://stackoverflow.com/questions/29820384/apache-kafka-order-of-messages-with-multiple-partitions –

ответ

3

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

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

Предполагая, что у вас есть хотя бы Kafka 0.9, каждому потребителю назначается раздел при регистрации у брокера. Если у вас есть одна тема с 2 разделами и двумя пользователями, каждому будет назначен один раздел. Эта информация хранится в ConsumerPartitionOwnershipInfo см. the design docs for more details. Каждому разделу в теме присваивается ровно один член в группе потребителей.

Поведение потребителей и изменения в 0,9 хорошо объясняются here.

+0

Так что если я имеют строгие требования к бизнесу, когда я создаю список объектов (в строгом порядке) на разных серверах в асинхронном режиме, мне нужно использовать 1 раздел или 1 ключ для хэширования этого, правильно? – ha9u63ar

+0

Использование только одного раздела с таким количеством реплик (максимально равным количеству брокеров) по вашему желанию. – Tombart

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

  • Нет связанных вопросов^_^