设置 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
文件中使用简单的步骤configure
和launch
启动容器。
在docker/include/etc/confluent/docker/configure
文件中,检查CONNECT_BOOTSTRAP_SERVERS
、CONNECT_KEY_CONVERTER
、CONNECT_VALUE_CONVERTER
...等强制环境变量是否设置,并用kafka-connect-standalone.properties.template
和kafka-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-connect JDBC PostgreSQL Sink Connector 显式定义 PostgrSQL 模式(命名空间)
Debezium:无法在 Kafka-Connect Docker 容器上设置观察程序。获取相关 ID 为 2 的元数据时出错 ... LEADER_NOT_AVAILABLE