需要把数据库、文件或消息系统实时同步到 Kafka,或把 Kafka 数据写入 Elasticsearch、对象存储、数据仓库。Kafka Connect 用配置而不是代码实现连接器管理。
connect-configs、connect-offsets、connect-status。cat > connect-distributed.properties <<'EOF'
bootstrap.servers=kafka1:9092,kafka2:9092,kafka3:9092
group.id=connect-cluster
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
offset.storage.topic=connect-offsets
offset.storage.replication.factor=3
config.storage.topic=connect-configs
config.storage.replication.factor=3
status.storage.topic=connect-status
status.storage.replication.factor=3
plugin.path=/opt/kafka/plugins
EOF
connect-distributed.sh connect-distributed.properties
curl -s http://localhost:8083/ | jq
安装 Debezium 等插件到 plugin.path,重启 Worker。
创建 Source Connector:
curl -X POST http://localhost:8083/connectors \
-H 'Content-Type: application/json' \
-d '{
"name": "mysql-source",
"config": {
"connector.class": "io.debezium.connector.mysql.MySqlConnector",
"tasks.max": "1",
"database.hostname": "mysql",
"database.port": "3306",
"database.user": "debezium",
"database.password": "***",
"database.server.id": "184054",
"topic.prefix": "cdc",
"database.include.list": "app",
"schema.history.internal.kafka.bootstrap.servers": "kafka1:9092",
"schema.history.internal.kafka.topic": "schema-changes.app"
}
}'
curl -X POST http://localhost:8083/connectors \
-H 'Content-Type: application/json' \
-d '{
"name": "es-sink",
"config": {
"connector.class": "io.confluent.connect.elasticsearch.ElasticsearchSinkConnector",
"tasks.max": "2",
"topics": "cdc.app.orders",
"connection.url": "http://elasticsearch:9200",
"key.ignore": "true",
"schema.ignore": "true"
}
}'
curl -s http://localhost:8083/connectors | jq
curl -s http://localhost:8083/connectors/mysql-source/status | jq
curl -s http://localhost:8083/connectors/mysql-source/tasks | jq
RUNNING。PUT /connectors/<name>/pause。plugin.path 配置错误,Worker 启动时找不到 connector class。database.server.id 与现有 MySQL 复制冲突。connect-distributed.sh — 启动分布式 Workercurl — Connect REST APIkafka-topics — 查看内部 topicskafka-consumer-groups — 检查消费进度jq — 格式化 REST 返回