无法在分布式模式下启动Kafka Connect进行弹性搜索

时间:2020-01-30 09:09:30

标签: apache-kafka apache-kafka-connect aws-msk

即使在独立模式下,我也试图以分布式模式启动Kafka连接,但是我无法继续进行操作

这是我的弹性搜索接收器属性

name=elasticsearch-sink
connector.class=io.confluent.connect.elasticsearch.ElasticsearchSinkConnector
tasks.max=5
topics=fsp-audit
key.ignore=true
connection.url=https://****.amazonaws.com
type.name=kafka-connect
errors.tolerance = all
errors.deadletterqueue.topic.name = fsp-dlq-audit-event

这是我的connect-distributed.properties

bootstrap.servers=***:9092,***:9092,***: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=1
schema.enabled=false
config.storage.topic=connect-configs
config.storage.replication.factor=1
status.storage.topic=connect-status
status.storage.replication.factor=1
offset.flush.interval.ms=10000
plugin.path=/usr/local/confluent/share/java

我还预先创建了三个topi

connect-offsets
connect-configs
connect-status

我正在EC2上运行它,并将MSK用作Kafka。 我检查了从EC2到MSK的连通性,并能够进行telnet

我得到这个错误

[2020-01-30 08:53:12,126] INFO [AdminClient clientId=adminclient-1] Metadata update failed (org.apache.kafka.clients.admin.internals.AdminMetadataManager:237)
org.apache.kafka.common.errors.TimeoutException: Timed out waiting to send the call.
[2020-01-30 08:53:12,145] INFO [AdminClient clientId=adminclient-1] Metadata update failed (org.apache.kafka.clients.admin.internals.AdminMetadataManager:237)
org.apache.kafka.common.errors.TimeoutException: Timed out waiting to send the call.
[2020-01-30 08:53:12,149] ERROR Stopping due to error (org.apache.kafka.connect.cli.ConnectDistributed:83)
org.apache.kafka.connect.errors.ConnectException: Failed to connect to and describe Kafka cluster. Check worker's broker connection and security properties.
        at org.apache.kafka.connect.util.ConnectUtils.lookupKafkaClusterId(ConnectUtils.java:64)
        at org.apache.kafka.connect.util.ConnectUtils.lookupKafkaClusterId(ConnectUtils.java:45)
        at org.apache.kafka.connect.cli.ConnectDistributed.startConnect(ConnectDistributed.java:94)
        at org.apache.kafka.connect.cli.ConnectDistributed.main(ConnectDistributed.java:77)
Caused by: java.util.concurrent.ExecutionException: org.apache.kafka.common.errors.TimeoutException: Timed out waiting for a node assignment.
        at org.apache.kafka.common.internals.KafkaFutureImpl.wrapAndThrow(KafkaFutureImpl.java:45)
        at org.apache.kafka.common.internals.KafkaFutureImpl.access$000(KafkaFutureImpl.java:32)
        at org.apache.kafka.common.internals.KafkaFutureImpl$SingleWaiter.await(KafkaFutureImpl.java:89)
        at org.apache.kafka.common.internals.KafkaFutureImpl.get(KafkaFutureImpl.java:260)
        at org.apache.kafka.connect.util.ConnectUtils.lookupKafkaClusterId(ConnectUtils.java:58)

问题:如果我必须以分布式模式运行Kafka connect,我是否必须使用多个EC2 / vm?

2 个答案:

答案 0 :(得分:1)

确定了更多细节之后,我发现问题出在NACL中,它阻止了几个子网的ip地址。

因此,我检查了MSK侧安全组/网络ACL /路由表,发现它们很好。这意味着问题可能出在EC2实例上,因此我检查了实例的“安全性”组/路由表,并发现它们已正确配置。

但是,在检查与EC2实例连接的网络ACL (acl-***)时,我看到有一个入站规则,允许临时端口使用0.0.0.0/0,这应该允许代理与EC2实例进行对话。但是,在查看出站规则时,我看到它仅允许存在b-2的子网范围,但是它没有任何明确的出站规则来允许b-3 (10.**.**.0/24)或b-4 {{1 }}子网范围。
当我添加新规则时,便能够ping通并完全连接成功

答案 1 :(得分:0)

如果我必须以分布式模式运行Kafka connect,我是否必须使用多个EC2 / vm?

否,您可以运行一个“伪分布式”实例。独立服务器和分布式服务器之间的主要区别在于,它如何处理偏移量和配置的存储。