Kafka-connect,Bootstrap代理断开连接

时间:2020-04-06 13:50:04

标签: apache-kafka apache-kafka-connect confluent-platform


我试图通过运行ElasticsearchSinkConnector来设置Kafka Connect。
Kafka设置,包括3个使用Kerberos,SSL和ACL保护的代理。

到目前为止,我一直在尝试使用docker / docker-compose(带有Kafka 2.4的Confluent docker-image 5.4)连接到远程kafka安装(Kafka 2.0.1-实际上是我们的生产环境)来运行connect-framework和elasticserch-server本地)。

KAFKA_OPTS: -Djava.security.krb5.conf=/etc/kafka-connect/secrets/krb5.conf
      CONNECT_BOOTSTRAP_SERVERS: srv-kafka-1.XXX.com:9093,srv-kafka-2.XXX.com:9093,srv-kafka-3.XXX.com:9093
      CONNECT_REST_ADVERTISED_HOST_NAME: kafka-connect
      CONNECT_REST_PORT: 8083
      CONNECT_GROUP_ID: user-grp
      CONNECT_CONFIG_STORAGE_TOPIC: test.internal.connect.configs
      CONNECT_OFFSET_STORAGE_TOPIC: test.internal.connect.offsets
      CONNECT_STATUS_STORAGE_TOPIC: test.internal.connect.status
      CONNECT_CONFIG_STORAGE_REPLICATION_FACTOR: 1
      CONNECT_STATUS_STORAGE_REPLICATION_FACTOR: 1
      CONNECT_OFFSET_STORAGE_REPLICATION_FACTOR: 1
      CONNECT_KEY_CONVERTER: org.apache.kafka.connect.json.JsonConverter
      CONNECT_VALUE_CONVERTER: org.apache.kafka.connect.json.JsonConverter
      CONNECT_INTERNAL_KEY_CONVERTER: org.apache.kafka.connect.json.JsonConverter
      CONNECT_INTERNAL_VALUE_CONVERTER: org.apache.kafka.connect.json.JsonConverter
      CONNECT_ZOOKEEPER_CONNECT: srv-kafka-1.XXX.com:2181,srv-kafka-2.XXX.com:2181,srv-kafka-3.XXX.com:2181
      CONNECT_SECURITY_PROTOCOL: SASL_SSL
      CONNECT_SASL_KERBEROS_SERVICE_NAME: "kafka"
      CONNECT_SASL_JAAS_CONFIG: com.sun.security.auth.module.Krb5LoginModule required \
                                useKeyTab=true \
                                storeKey=true \
                                keyTab="/etc/kafka-connect/secrets/kafka-connect.keytab" \
                                principal="<principal>;
      CONNECT_SASL_MECHANISM: GSSAPI
      CONNECT_SSL_TRUSTSTORE_LOCATION: <path_to_truststore.jks>
      CONNECT_SSL_TRUSTSTORE_PASSWORD: <PWD>


启动连接框架时,一切似乎都工作正常,我可以看到日志声称kerberos身份验证已成功完成。

当我尝试使用curl启动连接作业时,问题就来了。

curl -X POST -H "Content-Type: application/json" --data '{ "name": "kafka-connect", "config": { "connector.class": "io.confluent.connect.elasticsearch.ElasticsearchSinkConnector", "tasks.max": 1, "topics": "test.output.outage", "key.ignore": true, "connection.url": "http://elasticsearch1:9200", "type.name": "kafka-connect" } }' http://localhost:8083/connectors

这项工作似乎启动没有问题,但是一旦它开始从kafka主题中开始消耗,我就会得到:

kafka-connect     | [2020-04-06 10:35:33,482] WARN [Consumer clientId=connector-consumer-user-grp-2-0, groupId=connect-user-2] Bootstrap broker srv-kafka-1.XXX.com:9093 (id: -1 rack: null) disconnected (org.apache.kafka.clients.NetworkClient)

在连接日志中为所有代理重复。

这个问题的本质是什么?与代理的通信似乎工作得很好-将连接作业按预期方式传递回kafka,并且当重新启动连接框架时,作业似乎按预期方式恢复(即使仍然存在问题)。

有人知道这可能是什么原因吗?或如何调试它。

由于这是我们的生产环境,因此更改服务器配置的可能性很小。但是从日志中我什么也看不到,这似乎表明有问题。

预先感谢

1 个答案:

答案 0 :(得分:9)

对于每个docs,您还需要在使用者/生产者上为Kafka Connect运行的连接器配置安全性。您可以通过添加consumer / producer前缀来实现。因此,由于您使用的是Docker,并且错误提示您正在创建接收器连接器(即需要使用方),因此请添加到您的配置中:

  CONNECT_CONSUMER_SECURITY_PROTOCOL: SASL_SSL
  CONNECT_CONSUMER_SASL_KERBEROS_SERVICE_NAME: "kafka"
  CONNECT_CONSUMER_SASL_JAAS_CONFIG: com.sun.security.auth.module.Krb5LoginModule required \
                            useKeyTab=true \
                            storeKey=true \
                            keyTab="/etc/kafka-connect/secrets/kafka-connect.keytab" \
                            principal="<principal>;
  CONNECT_CONSUMER_SASL_MECHANISM: GSSAPI
  CONNECT_CONSUMER_SSL_TRUSTSTORE_LOCATION: <path_to_truststore.jks>
  CONNECT_CONSUMER_SSL_TRUSTSTORE_PASSWORD: <PWD>

如果您还要创建源连接器,则需要复制以上内容,但也需要复制PRODUCER_