Kafka Connect REST API возвращает время ожидания запроса. В настоящее время работник обеспечивает членство в кластереMySql

Форум по Mysql
Ответить
Anonymous
 Kafka Connect REST API возвращает время ожидания запроса. В настоящее время работник обеспечивает членство в кластере

Сообщение Anonymous »

Я пытаюсь зарегистрировать коннектор Debezium MySQL с помощью Kafka Connect REST API, но запрос завершается с ошибкой тайм-аута даже до того, как конфигурация коннектора будет проверена.

Использована команда

Код: Выделить всё

curl -X POST -H "Content-Type: application/json" \
--data @mysql-outbox-connector.json \
http://localhost:8083/connectors

Ответ об ошибке

Код: Выделить всё

{
"error_code": 500,
"message": "Request timed out. The worker is currently ensuring membership in the cluster, which began at 2025-12-12T15:08:26.360Z"
}

docker-compose.yaml

Код: Выделить всё

services:
mysql:
image: mysql:8.0
container_name: mysql
command: >
--default-authentication-plugin=mysql_native_password
--binlog-format=ROW
--server-id=1
--log-bin=mysql-bin
--binlog-row-image=FULL
environment:
MYSQL_ROOT_PASSWORD: rootpassword
MYSQL_DATABASE: edtech_orders
ports:
- "3306:3306"
volumes:
- mysql_data:/var/lib/mysql
- ./mysql-init:/docker-entrypoint-initdb.d
healthcheck:
test: ["CMD", "mysqladmin", "ping", "-h", "localhost", "-u", "root", "-prootpassword"]
interval: 10s
timeout: 5s
retries: 5

kafka:
image: apache/kafka:latest
container_name: kafka-event-pipeline
ports:
- "9092:9092"
- "29092:29092"
- "29093:29093"
environment:
KAFKA_NODE_ID: 1
KAFKA_PROCESS_ROLES: broker,controller
KAFKA_CONTROLLER_QUORUM_VOTERS: 1@kafka:9093
# Day 3: three listeners
# - INTERNAL: for inter-broker and internal containers (e.g.  Kafdrop)
# - EXTERNAL: for host applications (Spring Boot services)
# - CONNECT: for Kafka Connect / Debezium
KAFKA_LISTENERS: INTERNAL://:29092,EXTERNAL://:9092,CONNECT://:29093,CONTROLLER://:9093
KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: INTERNAL:PLAINTEXT,EXTERNAL:PLAINTEXT,CONNECT:PLAINTEXT,CONTROLLER:PLAINTEXT
KAFKA_CONTROLLER_LISTENER_NAMES: CONTROLLER
KAFKA_INTER_BROKER_LISTENER_NAME: INTERNAL
KAFKA_ADVERTISED_LISTENERS: INTERNAL://kafka:29092,EXTERNAL://localhost:9092,CONNECT://kafka:29093
KAFKA_AUTO_CREATE_TOPICS_ENABLE: "true"
ALLOW_PLAINTEXT_LISTENER: "yes"

connect:
image: debezium/connect:3.0.0.Final   # or :latest
container_name: connect
depends_on:
kafka:
condition: service_started
mysql:
condition: service_healthy
environment:
# Use the CONNECT listener exposed by Kafka (see KAFKA_ADVERTISED_LISTENERS)
BOOTSTRAP_SERVERS: kafka:29093
GROUP_ID: 1
CONFIG_STORAGE_TOPIC: connect-configs
OFFSET_STORAGE_TOPIC: connect-offsets
STATUS_STORAGE_TOPIC: connect-status

CONFIG_STORAGE_REPLICATION_FACTOR: "1"
OFFSET_STORAGE_REPLICATION_FACTOR: "1"
STATUS_STORAGE_REPLICATION_FACTOR: "1"
KEY_CONVERTER: org.apache.kafka.connect.json.JsonConverter
VALUE_CONVERTER: org.apache.kafka.connect.json.JsonConverter
KEY_CONVERTER_SCHEMAS_ENABLE: "false"
VALUE_CONVERTER_SCHEMAS_ENABLE: "false"
REST_ADVERTISED_HOST_NAME: connect
ports:
- "8083:8083"

kafdrop:
image: obsidiandynamics/kafdrop:latest
container_name: kafdrop-event-pipeline
depends_on:
- kafka
ports:
- "9000:9000"
environment:
KAFKA_BROKERCONNECT: "kafka:29092"
JVM_OPTS: "-Xms32M -Xmx64M"
SERVER_SERVLET_CONTEXTPATH: "/"

volumes:
mysql_data:

mysql-outbox-connector.json

Код: Выделить всё

{
"name": "mysql-outbox-connector",
"config": {
"connector.class": "io.debezium.connector.mysql.MySqlConnector",
"tasks.max": "1",

"database.hostname": "mysql",
"database.port": "3306",
"database.user": "debezium",
"database.password": "dbzpass",
"database.server.id": "184054",
"database.server.name": "dbserver1",
"database.include.list": "edtech_orders",
"table.include.list": "edtech_orders.outbox_events",

"include.schema.changes": "false",

"topic.prefix": "dbz",

"snapshot.mode": "initial",

"decimal.handling.mode": "string",
"time.precision.mode": "connect",

"schema.history.internal.kafka.bootstrap.servers": "kafka:290934",
"schema.history.internal.kafka.topic":  "schema-changes.edtech_orders"
}
}

Среда

  • Kafka работает в Docker
  • Kafka Connect работает в Docker
  • Коннектор MySQL Debezium
  • В качестве источника (исходящих сообщений) используется MySQL шаблон)
  • Конечная точка REST Kafka Connect: 

    Код: Выделить всё

    http://localhost:8083

Поделюсь некоторыми своими наблюдениями

  • Ошибка возникает сразу при вызове Connect REST API
  • Конфигурация соединителя вообще не проверяется
  • Это происходит даже до того, как Зарегистрирована ошибка, связанная с Debezium/MySQL
  • Журналы Kafka Connect показывают, что он все еще пытается присоединиться к кластеру/создать внутренние темы

Что я проверил

  • Брокер Kafka работает
  • Kafka Контейнер Connect запущен
  • Конечная точка REST доступна, но возвращает тайм-аут для создания соединителя

Вопрос

Что заставляет Kafka Connect оставаться в этом состоянии

Код: Выделить всё

"ensuring membership in the cluster"
 и отклонять запросы REST по тайм-ауту?
Как правильно убедиться в полной готовности Kafka Connect перед регистрацией соединителей?

Подробнее здесь: https://stackoverflow.com/questions/798 ... tly-ensuri
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «MySql»