Apache kafka 卡夫卡-同一交易中的不同卡夫卡制作人

Apache kafka 卡夫卡-同一交易中的不同卡夫卡制作人,apache-kafka,transactions,avro,Apache Kafka,Transactions,Avro,出于迁移目的,我们需要在同一事务中使用两个不同的序列化程序生成记录,从而使用两个不同的KafkaProducer(一个字符串和一个Avro)。 但所有事务都是通过一个KafkaProducer实例完成的,如下所示: kafkaProducer.beginTransaction(); ... kafkaProducer.send(record); ... kafkaProducer.commitTransaction(); 我是否可以使用第二个kafkaProducer(与第二个序列化程序一起)

出于迁移目的,我们需要在同一事务中使用两个不同的序列化程序生成记录,从而使用两个不同的KafkaProducer(一个字符串和一个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()。。所以我认为上面的模型行不通。。
在不并行实例化所有事务的全新实例的情况下,是否有可能实现这一点?

一次只能有一个事务中活动的生产者

如果您使用相同的
transactional.id
启动两个生产者,其中一个生产者将被隔离,无法提交其记录,并且所有ECORD将不属于同一事务


您需要使用单个生产者,一个可能的解决方法是将其配置为使用
ByTeserializer
,并明确地处理
对象
到逻辑中字节的转换。

我认为如果调用第二个生产者的initTransaction(),它会受到限制,但在我的示例中我没有。如果我想从AvroSerDes中获益,那么使用byteserializer就太复杂了。。