Kafka 我是否需要定义事务ID来启用幂等生产者?

a0x5cqrl  于 2023-08-02  发布在  Apache
关注(0)|答案(1)|浏览(111)

我在spring-kafka中发现要启用idempotence producer,我必须设置transactionIdPrefix,但我不需要事务,只需要idempotence

public void setTransactionIdPrefix(String transactionIdPrefix) {
    Assert.notNull(transactionIdPrefix, "'transactionIdPrefix' cannot be null");
    this.transactionIdPrefix = transactionIdPrefix;
    enableIdempotentBehaviour();
}

字符串
所以我必须定义transaction ididempotence仍然会在默认kafka-client的重试ack级别上工作?

xxls0lw8

xxls0lw81#

您不需要启用事务来启用幂等;该代码存在是因为事务需要幂等性;用户必须没有将其配置为假。
有关如何设置任意Kafka属性的信息,请参阅 Boot 文档:
https://docs.spring.io/spring-boot/docs/current/reference/html/messaging.html#messaging.kafka.additional-properties
自动配置支持的属性在附录的“集成属性”部分中显示。请注意,在大多数情况下,这些属性(连字符或camelCase)直接Map到Apache Kafka点属性。请参阅Apache Kafka文档了解详细信息。
名称中不包含客户端类型(生产者、消费者、管理员或流)的属性被认为是通用的,并适用于所有客户端。如果需要,可以为一个或多个客户端类型重写这些公共属性中的大多数。
Apache Kafka指定属性的重要性为HIGH、MEDIUM或LOW。Sping Boot 自动配置支持所有HIGH重要性属性,一些选定的MEDIUM和LOW属性,以及任何没有默认值的属性。
Kafka支持的属性中只有一个子集可以直接通过KafkaProperties类获得。如果要使用不直接支持的其他属性配置单个客户端类型,请使用以下属性:

spring:
  kafka:
    properties:
      "[prop.one]": "first"
    admin:
      properties:
        "[prop.two]": "second"
    consumer:
      properties:
        "[prop.three]": "third"
    producer:
      properties:
        "[prop.four]": "fourth"
    streams:
      properties:
        "[prop.five]": "fifth"

字符串
或者是

spring.kafka.properties[prop.one]=first
spring.kafka.admin.properties[prop.two]=second
spring.kafka.consumer.properties[prop.three]=third
spring.kafka.producer.properties[prop.four]=fourth
spring.kafka.streams.properties[prop.five]=fifth


这将公共prop.one Kafka属性设置为first(适用于生产者、消费者、管理员和流),prop.two admin属性设置为second,prop.three消费者属性设置为第三,prop.four生产者属性设置为第四,prop.five streams属性设置为第五。
在任何情况下,如果您没有更改相关属性,则默认情况下将启用该选项;请参阅https://kafka.apache.org/documentation/#producerconfigs_enable.idempotence

相关问题