我写Kafka消费者使用SpringKafka模板。当我示例化消费者时,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,这是根据具体情况而定。但还是想听听Maven的意见)
我们的交货期至少有一次。因此,对于这个(至少一次)交付语义,应该保持这些语义不变,并且它仍将处理大量数据。
任何指点或答案都会对澄清我的疑虑大有帮助。
1条答案
按热度按时间oalqel3c1#
默认值是为了服务于kafka的大多数用例。然而,假设这些不同的配置可以被设置为服务于所有用例是一种错觉。
理解默认值的一个很好的起点是简单的kafka consumerconfiguration及其spring文档。在confluence文档中,您还会发现每个配置的“重要性”。如果将此重要性设置为高,建议您认真考虑。关于这里的重要性,我已经提供了更多的背景资料。
至少一次
至少有一次,您希望控制已使用消息的提交。为了这个,
enable.autto.commit
需要设置为false
这是自spring版本2.3以来的默认值。除此之外AckMode
默认设置为BATCH
这是至少一次语义的基础。因此,根据您的spring版本,您似乎可以保留默认配置来实现至少一次语义。