Spring Kafka Consumer Configs - 默认值和至少一次语义

Raj*_*j V 1 apache-kafka kafka-consumer-api spring-kafka

我正在使用 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);
Run Code Online (Sandbox Code Playgroud)

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

  1. 这些是在什么基础上到达的?
  2. 是否真的需要改变这些值,如果是的话,这些值是什么
    (恕我直言,这是根据具体情况而定的。但仍然想听听专家的意见)
  3. 我们拥有的传递语义是至少一次。因此,对于这种(至少一次)传递语义,如果这些保持不变,它仍然会处理大量数据。

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

mik*_*ike 6

默认值是为了服务于 Kafka 的大多数用例。然而,假设可以设置这些许多不同的配置来服务于所有用例,这将是一种幻想。

理解默认值的一个很好的起点是普通的 Kafka ConsumerConfiguration和 Spring 的文档。在 Confluence 文档中,您还可以找到每个配置的“重要性”。如果这个重要性设置的很高的话,建议认真考虑一下。我在这里已经给出了一些关于重要性的更多背景知识。

至少一次

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

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