Kafka Connect "worker_id" установлен на петлю "127.0.1.1:8083"? - PullRequest
0 голосов
/ 28 августа 2018

У меня есть трехузловой кластер Confluent Kafka. На каждом узле запущены Zookeeper, Kafka Broker, Schema-Registry и Kafka Connect.

Я настроил приемник S3. Кажется, он работает, но worker_id настроен на IP-адрес обратной связи, а не на уникальный IP-адрес, что выглядит неправильно:

curl "localhost:8083/connectors/my-s3-sink/status" | jq '.'

{
  "name": "my-s3-sink",
  "connector": {
    "state": "RUNNING",
    "worker_id": "127.0.1.1:8083"
  },
  "tasks": [
    {
      "state": "RUNNING",
      "id": 0,
      "worker_id": "127.0.1.1:8083"
    }
  ],
  "type": "sink"
}

Как Kafka Connect получает адрес 127.0.1.1:8083 loopback? Я предполагаю, что это не правильно для производственного кластера с тремя узлами.

Как проверить конфигурацию кластера, чтобы найти проблему?

Я запускаю Kafka Connect через systemd через /usr/bin/connect-distributed /etc/kafka/connect-distributed.properties и bootstrap.servers, в этом файле свойств заданы IP-адреса трех узлов, которые не преобразуются в IP-шлейф. (Я x из фактических значений IP для конфиденциальности)

bootstrap.servers=172.x.x.x:9092,172.x.x.x:9092,172.x.x.x:9092

Мои брокеры Kafka настроены на /etc/kafka/server.properties настройки:

listeners=PLAINTEXT://0.0.0.0:9092
# EC2 public hostname
advertised.listeners=PLAINTEXT://ec2-34-x-x-x.us-west-2.compute.amazonaws.com:9092
# EC2 internal/private hostnames. localhost entry will resolve to 127.0.1.1
zookeeper.connect=ip-172-x-x-x.us-west-2.compute.internal:2181,ip-172-x-x-x.us-west-2.compute.internal:2181,ip-172-x-x-x.us-west-2.compute.internal:2181

А /etc/kafka/zookeeper.properties настроен с:

server.1=172.x.x.x:2888:3888
server.2=172.x.x.x:2888:3888
server.3=172.x.x.x:2888:3888

1 Ответ

0 голосов
/ 29 августа 2018

Свойство rest.host.name должно быть настроено на IP или имя хоста каждого экземпляра в connect-distributed.properties. Лидер кластера использует остальные API для балансировки задач по всему кластеру, поэтому также обновите rest.host.port, если вы не используете 8083.

# Hostname & Port for the REST API to listen on. If this is set, 
# it will bind to the interface used to listen to requests.
#rest.host.name=
#rest.port=8083
...