2015-01-14 2 views
1

Можно ли читать из нескольких разделов с помощью Kafka Simple Consumer? Простой Потребитель использует раздел в следующем:Можно ли читать из нескольких разделов с помощью Kafka Simple Consumer?

PartitionMetadata metadata = findLeader(brokers, port, topic, partition); 
SimpleConsumer consumer = new SimpleConsumer(leadBroker, port, 100000, 64 * 1024, clientName); 
leadBroker = findNewLeader(leadBroker, topic, partition, port); 

https://cwiki.apache.org/confluence/display/KAFKA/0.8.0+SimpleConsumer+Example

ответ

1

Один экземпляр SimpleConsumer считывает данные из одного раздела. Хотя вы можете легко создавать несколько экземпляров SimpleConsumer и читать разные разделы последовательно или параллельно (из разных потоков).

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

+0

Почему это сложно? хеширование и т. д. все настроены, не так ли? – zinking

1

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

Для стартера вы можете запускать всех потребителей на одной машине. Но в конечном итоге вам придется начать использовать разные машины для потребления. В то время вам нужно обеспечить, чтобы один раздел обрабатывался только один раз. Конкретно, проблема, которую вам нужно решить, состоит в том, что 2 потока (из разных) пытаются прочитать из одного раздела. Во все времена, вы должны разрешить только один обработать его.

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

Предлагаю вам использовать High Level Consumer. Это намного проще в использовании, чем Simple Consumer. Он обеспечивает координацию между различными потоками, обращаясь к одному разделу, и управляет своими смещениями.

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

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