我正在使用spring-kafka模板编写kafka消费者。当我实例化消费者时,Springkafka会接受如下参数。
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);
我阅读了文档,看起来还有很多其他参数可以在消费者配置时传递。有趣的是,每个参数都有一个默认值。我的问题是
- 这些是根据什么到达的
- 是否真的需要更改这些值,如果需要,这些值会是什么
(IMHO,这是根据具体情况而定。但仍然希望听到来自专家( - 我们的交付语义至少是一次。因此,对于这个(至少一次(交付语义,是否应该保留这些不受影响,它仍然可以处理大量数据
任何提示或答案都会对澄清我的疑虑有很大帮助。
默认值是为围绕Kafka的大多数用例提供服务。然而,假设这些不同的配置可以设置为所有用例,那将是一种错觉。
了解默认值的一个好的起点是简单的Kafka ConsumerConfiguration及其文档。在Confluence文档中,您还可以找到每个配置的";重要性";。如果这个重要性设置得很高,建议认真考虑。我在这里提供了更多关于重要性的背景信息。
至少一次
对于至少一次语义,您希望控制已消费消息的提交。为此,enable.autto.commit
需要设置为false
,这是自spring版本2.3(以来的默认值。此外,AckMode
默认设置为BATCH
,这是至少一次语义的基础。
因此,根据您的Spring版本,您似乎可以保留默认配置来实现至少一次语义。