Проблема с разделом группы потребителей Kafka

введите описание изображения здесь

Я читал вики Kafka, у меня проблемы с этой картинкой.

  1. Для группы потребителей A, C1, C2, может принимать только сообщение с двумя разделами, например, C1 принимает только P0, а C2 получает только P1?

  2. Насколько я знаю, одна группа потребителей сопоставляет одну тему, поэтому C1, C2 должны иметь одну и ту же тему, поэтому PO, P1, P2, P3 имеют одну и ту же тему, верно?

  3. Итак, есть одно противоречие: если проблема 2 верна, то группа потребителей A и группа потребителей B имеют одну и ту же тему, поэтому противоречие между одной группой потребителей соответствует одной теме.

  4. Как C1 управляет сообщением P0, P1, если у P0, P1 одна и та же тема, это означает, что C1 получит дублирующееся сообщение, если нет, как C1 управляет другим сообщением только с одним смещением?

  5. Вопрос о «Все разделы содержат одну и ту же тему, по крайней мере, так я интерпретирую это изображение». Итак, я предполагаю, что та же тема с именем «test», тогда один производитель выдает сообщение «Hello test» для этой темы, это означает C1 , C2, C3, C4 все получат одно и то же сообщение? И что касается четвертого ответа, C1 по-прежнему дважды получает "Hello test"?

  6. Может ли CG-A или CG-B получить сообщение с другой темой?

  7. Я не видел никаких преимуществ в Consumer Group: «Иногда логика для чтения сообщений от Kafka не заботится об обработке смещений сообщений, ей просто нужны данные. Таким образом, Consumer высокого уровня предоставляется для абстрагирования большей части деталей поглощающие события от Кафки ". из вики Kafka, не могли бы вы привести мне пример этой картины для группы потребителей, например, вы видите, что CG-A сообщает о задачах, а CG-B отслеживает?

  8. Означает ли это, что P0, P1, P2, P3 из одной темы под названием "test" будут отправлять разные сообщения? но я следил за вики Кафки, например:

    а. bin / kafka-server-start.sh конфигурация / server.properties

    б. bin / kafka-topics.sh --create --zookeeper localhost: 2181 --replication-factor 1 --partitions 3 --topic test // разделов 3

    c. bin / kafka-console-producer.sh --broker-list localhost: 9092 --topic test

    d. bin / kafka-console-consumer.sh --zookeeper localhost: 2181 --topic test --from-begin

    Затем я набираю что-то в производителе, и потребитель покажет это сообщение?

Итак, как эти три раздела могут иметь разные сообщения?

  1. Наконец, как я могу использовать командную строку для имитации этого изображения? Создайте группу потребления, затем назначьте ей какого-либо потребителя, затем создайте сообщение, и могу ли я отслеживать взаимосвязь между разделом и потребителем, а также сообщение, отправленное из какого раздела?

Спасибо большое


person regrecall    schedule 01.09.2014    source источник


Ответы (2)


  1. На рисунке группа потребителей A и группа потребителей B считывают все 4 раздела. C1 -> [P0, P3], C2 -> [P1, P2] Предположим, что возникла проблема с C1, и этот потребитель завершает работу. Затем C2 возьмет на себя два оставшихся раздела, и отображение будет выглядеть следующим образом: C2 -> [P0, P1, P2, P3] Давайте представим, что вы устраняете проблему, перезапускаете C1, а также добавляете третьего потребителя C3 в ту же группу. Тогда у вас будет отображение типа C1 -> [P0], C2 -> [P1, P2], C3 -> [P3]

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

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

  4. Определенное сообщение существует только в одном из разделов, поэтому не будет получено повторяющихся сообщений. Для целей избыточности в Kafka также есть функция репликации, но это другая концепция по сравнению с разделами. Репликация не показана на рисунке, но это будет означать, что у вас будет что-то вроде [P0_leader, P1_follower, P2_follower, P3_leader] на сервере 1 и [P0_follower, P1_leader, P2_leader, P3_follower] на сервере 2.

person Lundahl    schedule 01.09.2014
comment
Спасибо за отличный ответ. У меня все еще есть вопрос о том, что все разделы содержат одну и ту же тему, по крайней мере, так я интерпретирую эту картинку. Итак, я предполагаю, что та же тема с именем test, затем один производитель создает сообщение Hello test для этой темы, это означает, что все C1, C2, C3, C4 получат одно и то же сообщение? И для четвертого ответа C1 по-прежнему дважды получает тест Hello? что-то не так, или я что-то неправильно понимаю? - person regrecall; 02.09.2014
comment
Еще раз спасибо за время, этот вопрос меня так долго волновал, вчера я запустил Kafka. - person regrecall; 02.09.2014
comment
Если у вас есть тест темы и вы создаете сообщение Hello test и не используете какой-либо конкретный ввод сообщений, то это сообщение попадет в один из разделов (а также, возможно, в реплики для этого раздела). Если сообщение попадает, например, в P1, то его могут потреблять C2 и C5. Наконец, то, сколько раз потребитель потребляет сообщение, действительно зависит от этого потребителя, но в общем случае C1 будет получать сообщение только один раз, а затем через определенные промежутки времени передать идентификатор сообщения последних использованных сообщений в Zookeeper как своего рода контрольную точку. - person Lundahl; 25.09.2014
comment
Спасибо за ваше терпеливое объяснение. Кажется, мне нужно узнать о кафке гораздо больше. - person regrecall; 10.10.2014

Вот некоторые результаты тестов для идентификатора раздела и группы потребителей.

Properties props = new Properties();
      //set all other properties as required
      props.put("group.id", "ConsumerGroup1");
      props.put("max.poll.records", "1");
      KafkaConsumer<String, String> consumer = new KafkaConsumer<String, String>(props);

Consumer.group id используется для балансировки производимых данных (если group.id отличается для каждого потребителя, каждый потребитель получит копию данных)

если раздел = 1 и общее количество потребителей = 2, только один из двух активных потребителей получит данные

если раздел = 2 и общее количество потребителей = 2, каждый из двух активных потребителей получает данные равномерно

если раздел = 3 и общее количество потребителей = 2, каждый из двух активных потребителей получит данные. один потребитель получает данные из 2 разделов, а другой - из 1 раздела.

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

person Beginner    schedule 05.04.2018