Spring Kafka 消费者配置 - 默认值和至少一次语义

Spring Kafka Consumer Configs - default values and at least once semantics

我正在使用 spring-kafka 模板编写 kafka 消费者。 当我实例化消费者时,Spring kafka 接受如下参数。

props.put(ConsumerConfig.ENABLE_AUTO_COMMIT_CONFIG, false);
props.put(ConsumerConfig.FETCH_MAX_BYTES_CONFIG, fetchMaxBytes);
props.put(ConsumerConfig.MAX_PARTITION_FETCH_BYTES_CONFIG, maxPartitionFetchBytes);

我阅读了文档,看起来还有很多其他参数也可以作为消费者配置传递。有趣的是,这些参数中的每一个都有一个默认值。 我的问题是

  1. 这些是根据什么到达的?
  2. 是否真的需要更改这些值,如果是的话,那些值是什么
    (恕我直言,这是视具体情况而定。但仍然想听听 来自专家)
  3. 我们拥有的交付语义至少有一次。 因此,对于这个(至少一次)交付语义,是否应该保留这些 未受影响,它仍会处理大量数据。

任何指点或答案都会对澄清我的疑惑有很大帮助。

默认值是尝试服务于围绕 Kafka 的大多数用例。但是,假设可以设置这么多不同的配置来服务于 所有 个用例是一种错觉。

理解默认值的一个很好的起点是 plain-Kafka ConsumerConfiguration and for Spring its documentation. In the Confluence docs you will also find for each configuration the "Importance". If this importance is set to high, it is recommended to really think about it. I have given some more background on the importance

至少一次

对于至少一次语义,您希望控制所消费消息的提交。为此,需要将 enable.autto.commit 设置为 false,这是自 spring 2.3 版以来的默认值。此外,AckMode 默认设置为 BATCH,这是至少一次语义的基础。

因此,根据您的 Spring 版本,您似乎可以保留默认配置以实现至少一次语义。