Разработка архитектуры Kafka Consumer: плагин Java или внешний клиент - PullRequest
0 голосов
/ 20 декабря 2018

Я кодирую решение для потребителя данных в кластер kafka (используя докеры для kafka), но мне все еще нужно решить, как его кодировать:

  1. На родном языке Kafka - эторазработано: java, в котором официальный сайт и git repo предоставляют примеры, https://github.com/apache/kafka/tree/trunk/examples/src/main/java/kafka/examples
  2. В другом клиенте, предоставленном на другом языке, https://cwiki.apache.org/confluence/display/KAFKA/Clients, например, Node.js

Дело в том, что я знаю, как кодировать решение на обоих языках, но я должен решить, в каком из них следует учитывать:

  • Реальная производительность, потребляющая сообщения кафки без создания узких мест.(Мое первое впечатление, что кодирование чего-либо на одном и том же базовом языке, который строит Kafka, уменьшит перегрузку), но я не совсем уверен в этом.
  • С точки зрения разработки решения (для сохранения языка, кодасогласованность стиля и расширяемость).Весь веб-интерфейс, сервис отдыха, а также постоянство данных разработаны в Node.js, а клиенты находятся в javascript / HTML5.

Это для сервера Ubuntu, в полностью докернизированной среде, я используюNode.js как основной язык для веб-сервисов и соединительных модулей.Я все еще не настраиваю клиента kafka, но использую параметры по умолчанию:

Java (с использованием KafkaConsumer)

import org.apache.kafka.clients.consumer.KafkaConsumer;
... 
props = ...
KafkaConsumer consumer = new KafkaConsumer<>(props);

Node.js (с использованием kafka-node npm lib)

var kafka = require('kafka-node');
...
client = ....
var consumer = new kafka.Consumer( client, [{ topic: 'topicVehicle' }], { autoCommit: true });

Мне приходится иметь дело с проблемой поддержания кода на разных уровнях на разных языках (java, nodejs ... возможно, python), и мне интересно, какое решение является более правильным.

1 Ответ

0 голосов
/ 20 декабря 2018

Я полагаю, что вы не захотите создавать своего потребителя Kafka как плагин Kafka по нескольким причинам:

  • основная причина: создание автономного потребителя позволяет вам масштабировать его и на основепри необходимости добавляя или удаляя экземпляры потребителей для той же группы потребителей, позволяя Kafka перераспределять доступные разделы для обработки среди этих экземпляров потребителей

другие причины:

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

Теперь, если вы деразработка какого-либо нового типа Connector или другого потребителя, который на самом деле больше похож на фреймворк / инструмент, который будет использоваться другими потребителями / производителями - имеет смысл разработать его как плагин для Kafka

...