apache-kafka - Kafka - 同一事务中的不同 KafkaProducers
问题描述
出于迁移目的,我们需要使用两个不同的序列化器生成记录,因此在同一事务中需要使用两个不同的 KafkaProducer(一个 String 和一个 Avro)。但是所有事务都是通过一个 KafkaProducer 实例完成的,如下所示:
kafkaProducer.beginTransaction();
...
kafkaProducer.send(record);
...
kafkaProducer.commitTransaction();
我可以使用第二个 kafkaProducer(带有第二个序列化程序)并使用相同的 transactionnal.id 并这样做:
kafkaProducer.beginTransaction();
...
kafkaProducer.send(record);
kafkaProducer2.send(record);
...
kafkaProducer.commitTransaction();
所有将是同一事务的一部分,都一致吗?
编辑 1:
根据我在java实现中看到的,在调用commitTransaction()时有一些机制,比如在生产者本身上调用flush()..所以我认为上面的模型不起作用..在不实例化的情况下实现这一点的任何机会一切并行的全新实例?
解决方案
您一次只能让一个生产者在事务中处于活动状态。
如果您使用相同的 2 个生产者启动transactional.id
,其中一个将被隔离并且无法提交其记录,并且所有记录都不会成为同一事务的一部分。
您需要使用单个生产者,一种可能的解决方法是将其配置为使用并明确处理逻辑中的字节BytesSerializer
转换。Objects
推荐阅读
- r - 将数据帧列表中的数据帧绑定到不同数据帧列表中的数据帧
- c# - 水晶报表中没有显示数据
- python - for循环不计算最大倍数
- java - 在 Eclipse 中为我的项目生成 Javadoc 后出错
- asp.net-core - .NET5 上单文件部署的优势
- java - 如何在 Spring Boot 中使用 LZMA 压缩压缩文件
- r - 使用 BiocParallel 在 R 中进行并行化
- amazon-dynamodb - 在 dynamodb 中进行全列查询的最佳方法是什么?
- javascript - 如何在反应原生的变化中添加过渡到视图的高度
- audiokit - WatchOS 对 AudioKit 的支持?