Кафка - Как проверить, жив ли потребитель, если нет, как вернуть потребителя в рабочее состояние? - PullRequest
0 голосов
/ 12 октября 2019

В настоящее время я работаю над проектом kafka java. Я новичок в этом, и мне трудно понять несколько основных понятий, связанных с дизайном Kafka Producer / Consumer.

  1. Скажем, у меня есть тема с одним разделом, и у меня естьпроизводитель, пишущий на это, и потребитель, потребляющий от темы. Если я разверну несколько экземпляров одного и того же приложения, каждый экземпляр будет работать со своим собственным потребителем. В этом случае, поскольку все потребители принадлежат одному и тому же идентификатору группы, будут ли сообщения равномерно распределены среди потребителей, работающих в нескольких экземплярах?

  2. Как проверить, жив ли потребитель впериодическая мода из приложения?.

  3. Если один / все потребители выйдут из строя, как мне перезапустить / вернуть его в рабочее состояние?
  4. Каков наилучший способ реализовать длинныйБегущий потребитель в Java?

Пожалуйста, предоставьте разъяснения по вышеуказанным запросам. Пожалуйста, исправьте меня, если какие-либо / все мои предположения / понимание неверны. Я знаю, что не поделился примерами кода, так как это концептуальные вопросы. При необходимости я могу поделиться фрагментами кода.

Ответы [ 2 ]

0 голосов
/ 13 октября 2019
  1. Вы сказали, что тема с одним разделом означает, что нельзя распределять сообщения по нескольким разделам. Вы потеряете одно из больших преимуществ Кафки. Вы должны увеличить раздел более чем на один. Если вы развернете несколько экземпляров одного и того же приложения, это не поможет распространять, поскольку сообщения публикуются в одном разделе, как вы упомянули, и только один экземпляр будет назначен только этому разделу, другие экземпляры будут просто простаивать.

  2. Вы можете использовать AdminClient Kafka API, чтобы проверить, не отстает ли ваш потребитель

    Properties props = new Properties();
    props.setProperty("bootstrap.servers", "localhost:9091");
    KafkaConsumer<String, String> consumer = new KafkaConsumer<>(props);
    AdminClient client = org.apache.kafka.clients.admin.AdminClient.create(props);
    ListConsumerGroupOffsetsResult offsets = client.listConsumerGroupOffsets("consumerId");
    Map<TopicPartition, OffsetAndMetadata> tt = offsets.partitionsToOffsetAndMetadata().get();
    ListConsumerGroupOffsetsResult offsets = client.listConsumerGroupOffsets(consumerId);
    Map<TopicPartition, OffsetAndMetadata> tt = offsets.partitionsToOffsetAndMetadata().get();
    for (Entry<TopicPartition, OffsetAndMetadata> entry : tt.entrySet()) {TopicPartition tp = entry.getKey();
      OffsetAndMetadata op = entry.getValue();
      Collections.singletonList(tp);
      consumer.assign(Collections.singletonList(tp));
      consumer.seekToEnd(Collections.singletonList(tp));
      System.out.println(consumerId + "," + tp.partition() + "," + consumer.position(tp) + ","
                                + op.offset() + "," + (consumer.position(tp) - op.offset()));
    }
    
  3. Вы не указали, где вы развернули, т, но если вы развернули с помощью марафонав mesos, он будет автоматически перезагружен. Вы можете перезапустить его вручную, и если вы используете тот же идентификатор группы, что и в предыдущем, ваше приложение начнет использовать там, где оно осталось.

0 голосов
/ 12 октября 2019
  1. Kafka допускает только одного потребителя на раздел и группу потребителей. Таким образом, несколько потребителей будут ждать, пока основной потребитель выйдет из строя, а затем подключатся к этому моменту, но только один потребитель за раз будет когда-либо потреблять для данного раздела / группы потребителей.

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

  3. Перезапустите приложение, и оно начнет с того места, на котором оно остановилось, только не перезапускайте сообщения отначало. Кафка справится с этим.

  4. Мы используем пружинный ботинок с пружиной Kafka. Не существует «лучшего» способа, но мы легко его устанавливаем и обслуживаем с помощью пружины.

...