cdc报错:[CDC:ErrKafkaNewSaramaProducer]kafka:

版本:4.0.13
kafka版本:3.1.0
详细报错
[CDC:ErrKafkaNewSaramaProducer]kafka: client has run out of available brokers to talk to (Is your cluster reachable?)

sink中指定了kafka的版本,不是faq中描述的问题,cdc没有日志,能telnet通kafka端口

同一个问题? ticdc 连接kafka(2.4.0) 报错

应该不是,我试了下低版本,也应该不是不兼容的问题,我的kafka是单机,不知道有没有关系

无奈之举,换成binlog来解决这个问题了,但是还是不清楚原理,可能是cdc不支持非集群模式,看了issue,又检查了自己的环境,也不是sasl的问题

https://github.com/pingcap/tiflow/issues/3352 可以看看报错是否一致。
可以在测试环境,升级到高版本试试。

我试了下,把kafka安装在本地tidb集群所在的机器上就可以正常启动,安装在其他地方就会报错
[2022-06-30 14:17:37,573] WARN [SocketServer brokerId=0] Unexpected error from /cdc_ip; closing connection (org.apache.kafka.common.network.Selector)
org.apache.kafka.common.network.InvalidReceiveException: Invalid receive (size = -720899)
at org.apache.kafka.common.network.NetworkReceive.readFrom(NetworkReceive.java:103)
at org.apache.kafka.common.network.KafkaChannel.receive(KafkaChannel.java:447)
at org.apache.kafka.common.network.KafkaChannel.read(KafkaChannel.java:397)
at org.apache.kafka.common.network.Selector.attemptRead(Selector.java:678)
at org.apache.kafka.common.network.Selector.pollSelectionKeys(Selector.java:580)
at org.apache.kafka.common.network.Selector.poll(Selector.java:485)
at kafka.network.Processor.poll(SocketServer.scala:913)
at kafka.network.Processor.run(SocketServer.scala:816)
at java.lang.Thread.run(Thread.java:748)

我试下升级集群版本看看有没有效果

大佬,我这里试了4.0.13,5.0.1,5.3.1,5.4.1都连不上,很奇怪,需要kafka机器能访问tidb集群的某一个端口么

我清楚原因了,我把kafka机器的9092端口tiup(ctl)所在的机器开放之后,cdc的任务就可以正常创建了,原来我只把9092的端口对cdc机器开放了,这点其实和我的认知有点不一样,我觉得ctl机器应该不需要访问kafka的9092端口,只是需要cdc机器访问kafka的9092端口就行了,这点比较奇怪,不太理解

现在看起来cdc创建任务的时候是需要ctl这里可以访问通kafka的9092端口,传输数据的时候是cdc访问kafka这里的9092端口

问题是发生在使用 tiup ctl 创建 changefeed 阶段么?这个阶段,访问 kafka 的是 tiup ctl,所以需要有访问 kafka 的能力。

嗯,对,但是我没太滤清源码,没看到哪里需要ctl访问kafka,大佬能给个源码位置么,另外还想问下,是不是每次ctl的操作例如调整配置,启动,停止等等都是由ctl直接访问kafka的,而不是经由cdc机器访问kafka的

tiup/main.go at master · pingcap/tiup (github.com)

tiup 宿主机,会存有各个组件的 binary,它直接调用这个 binary,执行相应的命令。也就是说,发出命令的是 tiup 宿主机,而不是被放置在某一个远端的 cdc。

至于访问 kafka,这是在 tiflow/sink.go at master · pingcap/tiflow (github.com)

当执行 cdc cli changefeed create --sink-uri="kafka://xxxx" 的时候,cli 会调用这部分代码。

tiup ctl:vxxxx cdc 其实就是在执行 cdc cli.

1赞

非常感谢大佬,我详细看下

大佬,这块我之前看源码的时候也看过,但是没看出来有连接kafka的操作啊,我只看到了init有连接kafka的操作,能详细讲解下么