Apache flink FlinkKafkaProducer的ProducerConfig具有精确的一次语义
当使用Kafka API创建具有一次语义的Kafka生产者时,必须设置两个属性:Apache flink FlinkKafkaProducer的ProducerConfig具有精确的一次语义,apache-flink,flink-streaming,Apache Flink,Flink Streaming,当使用Kafka API创建具有一次语义的Kafka生产者时,必须设置两个属性:transactional.id必须设置为事务id,并且enable.idemptence必须设置为true 在Apache Flink中,FlinkKafkaProducer可以配置一个参数,用于生成程序所需的语义,特别是值语义 查看FlinkKafkaProducer的源代码,事务ID是自动生成和维护的。但是,对于基础KafkaProducer的ProducerConfig,我没有找到任何地方将enable.id
transactional.id
必须设置为事务id,并且enable.idemptence
必须设置为true
在Apache Flink中,FlinkKafkaProducer
可以配置一个参数,用于生成程序所需的语义,特别是值语义
查看FlinkKafkaProducer的源代码,事务ID是自动生成和维护的。但是,对于基础KafkaProducer
的ProducerConfig
,我没有找到任何地方将enable.idemptence
设置为true
属性是否启用。幂等性必须在ProducerConfig
中提供给FlinkKafkaProducer
,或者是否有我监督过的内容?不需要按照以下说明进行设置:
如果设置了transactional.id,则幂等性将自动启用,同时生产者将配置幂等性所依赖的
正如您所注意到的,在选择了Semantics.ONCE之后,Flink恰好负责设置和控制transactional.id
属性
不过,您可能会对一些其他属性感兴趣。我不知道现在情况如何,但正如我上次检查默认Kafka brokers/clients配置时所说,在某些情况下,实际上允许发生数据丢失 如何重写transaction.id
属性?您不能。请记住,Flink并没有使用单一的transactional.id
,但是FlinkKafkaProducer的每个并行实例都使用自己的池。我认为默认情况下,池的大小是5。例如,如果并行度为12,则单个作业将使用60transactional.id
。您还可以在这里查看:ty以了解更多信息。幸运的是,在我通过ssl证书的情况下,transaction.id
前缀就足够了。Flink正在使用task name+uid作为kafka生产者事务id前缀