设置 Kafka Connect,无法重命名组 ID

Posted

技术标签:

【中文标题】设置 Kafka Connect,无法重命名组 ID【英文标题】:Setting up Kafka Connect, cannot rename group ID 【发布时间】:2022-01-10 07:01:57 【问题描述】:

我正在使用我找到的这个 Github 存储库和文件夹路径:https://github.com/entechlog/kafka-examples/tree/master/kafka-connect-standalone

我遇到的问题是,作为访问控制的问题,我必须通过添加前缀来指定我的组 ID,我们称之为abc-。当我构建这个 Docker 映像时,我检查了我的日志,我可以看到组 ID 最终是 connect-bq-sink-connector,我假设它是单词 connect- 与变量 CONNECTOR_NAME 在 docker 中看到的串联-撰写文件。当我更改连接器名称变量时,我的组 ID 也会更改(但 connect- 前缀始终保留)。您还将在 docker-compose 文件中看到一个名为 CONNECT_GROUP_ID 的变量。这个变量似乎对 Kafka 连接实例完全没有影响。 Docker 日志给出了这个(按此顺序):

WARN The configuration 'group.id' was supplied but isn't a known config. (org.apache.kafka.clients.admin.AdminClientConfig:380)

然后……

...

group.id = connect-bq-sink-connector

最后一个错误是:

[2021-12-03 22:37:32,775] INFO [bq-sink-connector|task-0] [Consumer clientId=connector-consumer-bq-sink-connector-0, groupId=connect-bq-sink-connector] FindCoordinator request hit fatal exception (org.apache.kafka.clients.consumer.internals.AbstractCoordinator:260)

org.apache.kafka.common.errors.GroupAuthorizationException: Not authorized to access Group: connect-bq-sink-connector

还有两件事:我不明白为什么每次都在结果组 ID 前加上 connect- 这个词,以及为什么变量 CONNECT_GROUP_ID 似乎根本不起作用。

我想也许图像是在前面强制硬编码connect-。我尝试通过将 docker compose 文件中的第 50 行从 image: entechlog/cp-kafka-connect$CONFLUENT_VERSION_TAG 更改为 image: confluentinc/cp-kafka:5.0.0 来运行它,但它没有任何改变。

是什么导致了这个前缀被添加,我该如何覆盖它?如有必要,我可以保留connect 这个词,但我只需要在它前面添加我的前缀abc-

【问题讨论】:

【参考方案1】:

如果要更改连接组 id,请在服务 kafka-connect 下添加环境变量名称 CONNECTOR_ 属性部分并设置所需的值。

github示例启动步骤如下。

在文件docker/Dockerfile中,启动命令是/etc/confluent/docker/run,在docker/include/etc/confluent/docker中找不到文件。 在docker/include/etc/confluent/docker/run 文件中使用简单的步骤configurelaunch 启动容器。 在docker/include/etc/confluent/docker/configure文件中,检查CONNECT_BOOTSTRAP_SERVERSCONNECT_KEY_CONVERTERCONNECT_VALUE_CONVERTER...等强制环境变量是否设置,并用kafka-connect-standalone.properties.templatekafka-connect.properties.template调用模板函数。

因此,如果您想将配置添加到kafka-connect-standalone.properties 文件中,则必须指定以CONNECTOR_ 开头的环境变量。

您可以在以下链接中找到 kafka connect 的所有配置。

https://kafka.apache.org/documentation/#connectconfigs

【讨论】:

我会尝试一下,但我想我已经尝试过了。至于 Dockerfile,它甚至被使用,因为我们使用的是融合图像? 不,我使用完全相同的示例。示例中的图片,我认为是来自confluentinc/cp-server-connect-base:6.2.1 我仍然在日志中看到:groupId=connect-bq-sink-connector 所以'connect-'仍然存在...... 您的观点对我来说很有意义,除了我仍然不明白如何指定组 ID 并在组 ID 中覆盖这个 connect- 前缀(检查日志,connect- 是任何我调用连接器名称)。 我终于找到答案了!无法更改“group.id”。检查来自 apache kafka 的以下源代码。 github.com/apache/kafka/blob/trunk/connect/runtime/src/main/…【参考方案2】:

Sink Connector 消费者组 id 前缀不能更改

https://issues.apache.org/jira/browse/KAFKA-4400

CONNECT_GROUP_ID 仅适用于 Kafka Connect 分布式模式集群,不适用于 Confluent 镜像使用的消费者。我看不到使用独立运行的链接映像有任何好处,因为这将无法容错或可扩展(连接配置和状态存储在临时文件系统中,而不是存储在 Kafka 中)

【讨论】:

我将它作为 POC 独立运行以在本地进行测试。如果我在云环境中以分布式模式运行,CONNECT_GROUP_ID 是否也会使用相同的类SinkUtils 及其方法consumerGroupId 在前面附加connect- 独立和分布式大致使用相同的内部类,是的

以上是关于设置 Kafka Connect,无法重命名组 ID的主要内容,如果未能解决你的问题,请参考以下文章

具有自定义消费者组名称的 Kafka Sink 连接器

Kafka消费者组与重平衡

kafka-connect JDBC PostgreSQL Sink Connector 显式定义 PostgrSQL 模式(命名空间)

无法读取 Kafka 主题 avro 消息

KafKa消费者组重平衡能避免吗

Debezium:无法在 Kafka-Connect Docker 容器上设置观察程序。获取相关 ID 为 2 的元数据时出错 ... LEADER_NOT_AVAILABLE