Anonymous
Kafka Connect REST API возвращает время ожидания запроса. В настоящее время работник обеспечивает членство в кластере
Сообщение
Anonymous » 14 дек 2025, 20:53
Я пытаюсь зарегистрировать
коннектор 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:
Поделюсь некоторыми своими наблюдениями
Ошибка возникает сразу при вызове Connect REST API
Конфигурация соединителя вообще не проверяется
Это происходит даже до того, как Зарегистрирована ошибка, связанная с Debezium/MySQL
Журналы Kafka Connect показывают, что он все еще пытается присоединиться к кластеру/создать внутренние темы
Что я проверил
Брокер Kafka работает
Kafka Контейнер Connect запущен
Конечная точка REST доступна, но возвращает тайм-аут для создания соединителя
Вопрос
Что заставляет Kafka Connect оставаться в этом состоянии
и отклонять запросы REST по тайм-ауту?
Как правильно убедиться в полной готовности Kafka Connect перед регистрацией соединителей?
Подробнее здесь:
https://stackoverflow.com/questions/798 ... tly-ensuri
1765734810
Anonymous
Я пытаюсь зарегистрировать [b]коннектор Debezium MySQL[/b] с помощью Kafka Connect REST API, но запрос завершается с ошибкой тайм-аута даже до того, как конфигурация коннектора будет проверена. [h4][b]Использована команда[/b][/h4] [code]curl -X POST -H "Content-Type: application/json" \ --data @mysql-outbox-connector.json \ http://localhost:8083/connectors [/code] [h4][b]Ответ об ошибке[/b][/h4] [code]{ "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" } [/code] [h4][b]docker-compose.yaml[/b][/h4] [code]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: [/code] [h4][b]mysql-outbox-connector.json[/b][/h4] [code]{ "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" } } [/code] [h4][b]Среда[/b][/h4] [list] [*]Kafka работает в Docker [*]Kafka Connect работает в Docker [*]Коннектор MySQL Debezium [*]В качестве источника (исходящих сообщений) используется MySQL шаблон) [*]Конечная точка REST Kafka Connect: [code]http://localhost:8083[/code] [/list] [h4][b]Поделюсь некоторыми своими наблюдениями[/b][/h4] [list] [*]Ошибка возникает сразу при вызове Connect REST API [*]Конфигурация соединителя вообще не проверяется [*]Это происходит даже до того, как Зарегистрирована ошибка, связанная с Debezium/MySQL [*]Журналы Kafka Connect показывают, что он все еще пытается присоединиться к кластеру/создать внутренние темы [/list] [h4][b]Что я проверил[/b][/h4] [list] [*]Брокер Kafka работает [*]Kafka Контейнер Connect запущен [*]Конечная точка REST доступна, но возвращает тайм-аут для создания соединителя [/list] [h4][b]Вопрос[/b][/h4] Что заставляет Kafka Connect оставаться в этом состоянии [code]"ensuring membership in the cluster"[/code] и отклонять запросы REST по тайм-ауту? Как правильно убедиться в полной готовности Kafka Connect перед регистрацией соединителей? Подробнее здесь: [url]https://stackoverflow.com/questions/79847173/kafka-connect-rest-api-returns-request-timed-out-the-worker-is-currently-ensuri[/url]