写点什么

TiCDC 同步 kafka 问题总结

  • 2024-01-12
    北京
  • 本文字数:2371 字

    阅读完需:约 8 分钟

作者: seiang 原文来源:https://tidb.net/blog/4687aca8


写在前面:感谢社区小伙伴在该问题上的协助和支持,同时感谢社区伙伴计划;得益于社区支持,回馈社区用户;


问答链接:https://asktug.com/t/topic/1020182


本文主要针对 TiCDC 同步数据到 kafka,关于 kafka 认证和非认证问题这里经过测试,分享 TiCDC 在 5.0.3 版本和 6.5.1 版本的差异;供大家使用过程中如果遇到类似问题可以作为参考;

一、问题背景

我们 TiDB 目前的版本主要是 5.0.3 和 6.5.1,之前在 5.0.3 版本集群的时候,已经有使用过 TiCDC 同步数据到 kafka 的实践案例;按道理 6.5.1 版本集群,在使用 TiCDC 同步数据到 kafka 的时候应该很丝滑才对,可结果却不怎么顺利;

二、测试验证

kafka 集群环境说明


kafka 版本:2.7.1


kafka 认证⽅式:SASL/PLAIN


kafka 集群即支持认证方式【端口:9092】,也支持非认证方式(即匿名用户方式)【端口:9093】

2.1 kafka 集群有认证

创建同步任务命令:


tiup ctl:v6.5.1 cdc changefeed create --pd=http://xx.xx.xx.xx:2379 --sink-uri="kafka://xx.xx.xx.xx:9092,xx.xx.xx.xx:9092,xx.xx.xx.xx:9092,xx.xx.xx.xx:9092/HB002_tidb_cdc_test?kafka-version=2.7.1&sasl-user=tidb_cdc&sasl-password=XXXXXXXX&saslmechanism=plain" --changefeed-id="test-kafka-task" --sortengine="unified" --config=./test_changefeed.toml
复制代码


6.5.1 版本


报错日志如下:


[2024/01/05 14:38:31.349 +08:00] [INFO] [middleware.go:48][/api/v2/changefeeds] [status=500] [method=POST] [path=/api/v2/changefeeds][query=] [ip=10.xx.xx.xx] [user-agent=Go-http-client/1.1] [clientversion=v6.5.1] [error="[CDC:ErrKafkaNewSaramaProducer]new sarama producer:Cluster authorization failed."] [errorVerbose="[CDC:ErrKafkaNewSaramaProducer]new sarama producer: Cluster authorizationfailed.\ngithub.com/pingcap/errors.AddStack\n\tgithub.com/pingcap/errors@v0.11.5-0.20221009092201-b66cddb77c32/errors.go:174\ngithub.com/pingcap/errors.(*Error).GenWithStackByArgs\n\tgithub.com/pingcap/errors@v0.11.5-0.20221009092201
复制代码


kafka 集群日志:


[2024-01-05 14:38:32,295] INFO get right password from cache: xxxxxxxx (org.apache.kafka.common.security.plain.internals.PlainSaslServer)[2024-01-05 14:38:32,295] INFO tidb_cdc:xxxxxxxxx auth success! (org.apache.kafka.common.security.plain.internals.PlainSaslServer)
复制代码


从 kafka 集群日志看,账号密码认证成功的,但是 TiCDC 日志报错:Cluster authorization failed


5.0.3 版本


报错日志如下:


Unsupported sasl-mechanism, should be SCRAM-SHA-256 or SCRAM-SHA-512
复制代码


TiCDC 从 5.0.3 版本开始为 kafka 下游增加 SASL/SCRAM 支持,但是仅支持 SCRAM-SHA-256 or SCRAM-SHA-512,不支持 PLAIN,所以针对 SASL/PLAIN 认证方式,5.0.3 版本不支持,所以只能使用非认证方式,针对非认证方式,见下文;

2.2 Kafka 集群无认证

创建同步任务命令:


tiup ctl:v6.5.1 cdc changefeed create --pd=http://xx.xx.xx.xx:2379 --sink-uri="kafka://xx.xx.xx.xx:9093,xx.xx.xx.xx:9093,xx.xx.xx.xx:9093,xx.xx.xx.xx:9093/HB002_tidb_cdc_test?kafka-version=2.7.1" --changefeed-id="test-kafka-task" --sortengine="unified" --config=./test_changefeed.toml
复制代码


6.5.1 版本


报错日志如下:


[2024/01/05 14:43:23.312 +08:00] [INFO] [middleware.go:48] [/api/v2/changefeeds] [status=500] [method=POST] [path=/api/v2/changefeeds] [query=] [ip=xx.xx.xx.xx] [user-agent=Go-http-client/1.1] [client-version=v6.5.1] [error="[CDC:ErrKafkaNewSaramaProducer]new sarama producer: Cluster authorization failed."] [errorVerbose="[CDC:ErrKafkaNewSaramaProducer]new sarama producer: Cluster authorization failed.
复制代码


kafka 集群此时没有错误日志输出,但是 TiCDC 日志报错:Cluster authorization failed


5.0.3 版本


同步任务创建成功


Create changefeed successfully!ID: tgp-task-test
复制代码


查看任务状态,正常:


$ tiup ctl:v5.0.3 cdc changefeed list --pd=http://xx.xx.xx.xx:2379     Starting component `ctl`: /home/tidb/.tiup/components/ctl/v5.0.3/ctl cdc changefeed list --pd=http://xx.xx.xx.xx:2379[
{ "id": "test-task-test", "summary": { "state": "normal", "tso": 446877370562117635, "checkpoint": "2024-01-05 14:46:03.553", "error": null } }]
复制代码


从上述结论看,同一个集群的 topic,5.0.3 集群的 CDC 同步任务可以创建成功,而 6.5.1 集群的 CDC 同步任务创建失败;

三、测试结论

经过社区的支持,TiCDC 能够正常工作所需的最小权限集合,


Kafka ACL 授权对 Topic 级别Create 、Write 和 Describe 权限。


对 Cluster 资源类型的 DescribeConfigs 权限;


在 6.5.1 版本,上述 4 个权限缺一不可,缺少权限在创建同步任务的时候就会出现 Cluster authorization failed 的报错;但是在 5.0.3 版本,针对非认证 kafka,不需要 Cluster 级别的DescribeConfigs 权限


最后,给 TiCDC 工具和文档提两个小建议:


1、文档上,“TiCDC 从 5.0.3 版本开始为 kafka 下游增加 SASL/SCRAM 支持,但是仅支持 SCRAM-SHA-256 or SCRAM-SHA-512,不支持 SASL/PLAIN”,可以添加到 5.0.3 的 TiCDC 工具使用文档中;


2、针对 TiCDC 需求的 kafka 的 ACL 权限,可以文档重点说明一下;


3、TiCDC 工具上,如果是权限的问题,报错信息可以提示的更加明确一些,而不是笼统的报错:Cluster authorization failed


笔者能力有限,文章中如果存在技术性或描述性等错误,请大家及时指正,非常感谢!


发布于: 刚刚阅读数: 3
用户头像

TiDB 社区官网:https://tidb.net/ 2021-12-15 加入

TiDB 社区干货传送门是由 TiDB 社区中布道师组委会自发组织的 TiDB 社区优质内容对外宣布的栏目,旨在加深 TiDBer 之间的交流和学习。一起构建有爱、互助、共创共建的 TiDB 社区 https://tidb.net/

评论

发布
暂无评论
TiCDC同步kafka问题总结_实践案例_TiDB 社区干货传送门_InfoQ写作社区