0

В настоящее время я работаю с платформой confluent 3.0.1. Я пытаюсь создать 2 разъема на двух разных рабочих, но попытка создать новый соединитель создает для него новую группу.Kafka-Connect: создание нового соединителя в распределенном режиме создает новую группу

Two connectors were created using below details: 

1) POST http://devmetric.com:8083/connectors 

{ 
    "name": "connector1", 
    "config": { 
     "connector.class": "com.xxx.kafka.connect.sink.DeliverySinkConnector", 
     "tasks.max": "1", 
     "topics": "dev.ps_primary_delivery", 
     "elasticsearch.cluster.name": "ad_metrics_store", 
     "elasticsearch.hosts": "devkafka1.com:9300", 
     "elasticsearch.bulk.size": "100", 
     "tenants": "tenant1" 
    } 
} 

2) POST http://devkafka01.com:8083/connectors 

{ 
    "name": "connector2", 
    "config": { 
     "connector.class": "com.xxx.kafka.connect.sink.DeliverySinkConnector", 
     "tasks.max": "1", 
     "topics": "dev.ps_primary_delivery", 
     "elasticsearch.cluster.name": "ad_metrics_store", 
     "elasticsearch.hosts": "devkafka.com:9300", 
     "elasticsearch.bulk.size": "100", 
     "tenants": "tenant1" 
    } 
} 

Но оба они были созданы под другим идентификатором группы. После этого я спросил о существующих группах.

$ sh ./bin/kafka-consumer-groups --bootstrap-server devmetric.com:9091 --new-consumer --list 

Result was: 
connect-connector2 
connect-connector1 

Эти группы были автоматически созданы Kafka и не были предоставлены мной. Я дал разные group.id в worker.properties. Но я хотел, чтобы оба разъема находились под одной группой, чтобы они работали параллельно, чтобы делиться сообщениями. В настоящее время у меня есть 1 миллион данных по теме «dev.ps_primary_delivery», и я хочу, чтобы оба разъема получили по 0,5 миллиона каждый.

Пожалуйста, дайте мне знать, как это сделать.

ответ

6

Я думаю, что требуется некоторое уточнение ...

  1. group.id в файле worker.properties не относится к группам потребителей. Это «рабочая группа» - несколько рабочих в одной рабочей группе будут разделять работу между ними, поэтому, если один и тот же коннектор имеет много задач (например, JDBC-коннектор имеет задачу для каждой таблицы), эти задачи будут распределены для всех рабочих в группе.

  2. В разъемах-разъемах есть потребители, входящие в группу потребителей. Группа group этой группы всегда является именем «connect -» + connector. В вашем случае у вас есть «connect-connector1» и «connect-connector2» на основе ваших имен соединителей. Это также означает, что единственный способ подключения двух разъемов в одной группе - это ... если они имеют одинаковое имя. Но имена уникальны, поэтому вы не можете иметь два разъема в одной группе. Причина в том, что ...

  3. Соединители действительно не получают события сами, они просто начинают кучу задач. Каждая из задач имеет потребителей, которые являются частью группы потребителей соединителей, и каждая задача будет обрабатывать подмножество тем и разделов независимо. Таким образом, наличие двух разъемов в одной группе, в основном означает, что все их задачи являются частью одной и той же группы, - так зачем вам два разъема? Просто настройте больше тем и больше задач для этого одного коннектора, и вы все настроены.

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

+1

Спасибо за разъяснение. Я прошел через код Kafka-connect, и я мог бы получить разницу между группой потребителей и рабочей группой. – Renukaradhya