使用@EmbeddedKafka测试Kafka事务时遇复制因子配置错误求助
Kafka事务启动报错InvalidReplicationFactorException的解决办法
错误根源
你遇到的问题是Kafka事务依赖的内部主题__transaction_state默认复制因子为3,但你的集群只有1个可用broker,不符合主题创建的副本要求,导致启动失败。
解决步骤
1. 修改Broker配置
找到Kafka的server.properties配置文件,添加或更新以下两项配置:
# 设置事务状态主题的复制因子,需等于你的broker数量(这里是1) transaction.state.log.replication.factor=1 # 设置最小同步副本数,不能超过复制因子 transaction.state.log.min.isr=1
2. 重启Kafka服务
修改配置后,必须重启Kafka broker才能让新配置生效。
3. 清理无效残留主题(可选)
如果之前启动失败时已经生成了无效的__transaction_state主题记录,需要手动删除:
kafka-topics.sh --delete --topic __transaction_state --bootstrap-server localhost:9092
代码中的.get()疑问解答
在事务代码里,tx.sendDefault("abacaba")不需要调用.get()。Kafka事务会自动管理消息的发送与确认,只有当事务提交成功时,所有事务内的消息才会被持久化到集群。调用.get()会将异步发送转为同步阻塞,虽然不破坏事务逻辑,但会降低程序的并发性能。
内容的提问来源于stack exchange,提问作者Kirill Kurdyukov
相关产品推荐
相关产品推荐

