使用KSQLDB创建Kafka-Cassandra Sink连接器失败报错求助
我刚碰到过一模一样的问题,咱们来拆解一下你的报错核心:
Caused by: org.apache.kafka.common.errors.InvalidReplicationFactorException: 复制因子: 3 大于可用Broker数量: 1。
这个错误是因为Confluent的Cassandra Sink连接器依赖Confluent内部的控制主题(比如_confluent-command),这些主题默认的复制因子是3,但你的Kafka集群只有1个Broker,根本满足不了3副本的要求,所以主题创建失败,进而导致连接器启动失败。
下面是几个可行的解决方案,你可以根据自己的环境选择:
方案1:在连接器创建语句里直接指定复制因子
修改你原来的CREATE语句,加上两个Confluent内部主题的复制因子配置,把它们设为1,适配单Broker环境:
CREATE SINK CONNECTOR cassandra WITH( "connector.class" = 'io.confluent.connect.cassandra.CassandraSinkConnector', "tasks.max" = '1', "topics" = 'tst', "cassandra.contact.points" = 'cassandra', "cassandra.keyspace" = 'test', "cassandra.write.mode" = 'Update', "confluent.topic.bootstrap.servers" = 'kafka:9092', "confluent.topic.replication.factor" = '1', "confluent.metadata.topic.replication.factor" = '1' );
删除之前失败的连接器,重新执行这个语句即可。
方案2:修改Connect全局配置
如果你的环境里还有其他Confluent连接器,不想每个都单独配置,可以修改Connect的分布式配置文件(比如connect-distributed.properties),添加以下两行:
confluent.topic.replication.factor=1 confluent.metadata.topic.replication.factor=1
修改完后重启Connect服务,再重新创建连接器。
方案3:手动创建需要的内部主题
也可以提前用Kafka的命令行工具手动创建_confluent-command主题,指定复制因子为1:
kafka-topics.sh --create --topic _confluent-command --bootstrap-server kafka:9092 --replication-factor 1 --partitions 1
创建完成后,再重新启动你的Cassandra Sink连接器。
本质上就是让Confluent的内部主题复制因子和你的Kafka Broker数量匹配,单Broker环境就设为1,生产环境如果是多Broker再调整为对应数量就行。
内容的提问来源于stack exchange,提问作者4it med

