Kafka-connect,Bootstrap 代理断开连接

Posted

技术标签:

【中文标题】Kafka-connect,Bootstrap 代理断开连接【英文标题】:Kafka-connect, Bootstrap broker disconnected 【发布时间】:2020-07-18 13:03:10 【问题描述】:

我试图设置 Kafka Connect 以运行 ElasticsearchSinkConnector。 Kafka 设置,由 3 个使用 Kerberos、SSL 和 ACL 保护的代理组成。 到目前为止,我一直在尝试使用 docker/docker-compose(Confluent docker-image 5.4 with Kafka 2.4)连接到远程 kafka 安装(Kafka 2.0.1 - 实际上是我们的生产环境)运行连接框架和 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-topic 开始消费,我就会得到:

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 Connect 工作人员? 如果你有 >1 个可用的代理,我也不会将复制因子设置为 1 我现在只运行 1 个连接工作者。将复制设置为 1 只是为了让事情变得简单(可能我错了)。我们的想法是在事情开始奏效后对其进行修改。 【参考方案1】:

根据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_ 也是

【讨论】:

天哪!我可以开始谢谢你了!!!我已经为此苦苦挣扎了一个星期,拉着我的头发。我完全相信我的安全配置是由消费者“继承”的。我还没有安全的理由(更多错误),但至少看起来你的评论确实起到了作用。再次感谢您!

以上是关于Kafka-connect,Bootstrap 代理断开连接的主要内容,如果未能解决你的问题,请参考以下文章

iBase4j前端01_bootstrap-suggest json-server模拟后台数据bootstrap-suggest环境搭建开启bootstrap-suggest的post和put请(代

Kafka-Connect实践

Kafka-connect 是不是必须使用模式注册表?

使用本地 kafka-connect 集群连接远程数据库的连接超时

使用独立模式 Kafka-connect 将 Postgresql 的数据捕获更改为 kafka 主题

MySql 查询在 Kafka-connect 中失败