黄东旭解析 TiDB 的核心优势
432
2024-03-16
写在前面:感谢社区小伙伴在该问题上的协助和支持,同时感谢社区伙伴计划;得益于社区支持,回馈社区用户;
问答链接: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集群即支持认证方式【端口:9092】,也支持非认证方式(即匿名用户方式)【端口:9093】
创建同步任务命令:
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.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 authorization failed.\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.20221009092201kafka集群日志:
[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-512TiCDC从5.0.3版本开始为 kafka 下游增加 SASL/SCRAM 支持,但是仅支持SCRAM-SHA-256 or SCRAM-SHA-512,不支持PLAIN,所以针对SASL/PLAIN认证方式,5.0.3版本不支持,所以只能使用非认证方式,针对非认证方式,见下文;
创建同步任务命令:
id="test-kafka-task" --sortengine="unified" --config=./test_changefeed.toml6.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
(笔者能力有限,文章中如果存在技术性或描述性等错误,请大家及时指正,非常感谢!)
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。