是否可以仅为生产者激活Kafka-Streams EOS?

时间:2018-07-16 16:56:32

标签: apache-kafka apache-kafka-streams

我想知道是否有可能仅在生产者部分使用EOS配置KafkaStream配置。 我有一个主题源,其中没有事务,也没有生产者设置的提交(生产者是librdkafka,尚未实现事务支持)。

我想与EOS生产者(事务+提交)一起在此主题上使用KafkaStream,但由于这一部分,我认为这还不可能:

final Map tempConsumerDefaultOverrides = new HashMap(CONSUMER_DEFAULT_OVERRIDES);
tempConsumerDefaultOverrides.put(ConsumerConfig.ISOLATION_LEVEL_CONFIG, READ_COMMITTED.name().toLowerCase(Locale.ROOT));
CONSUMER_EOS_OVERRIDES = Collections.unmodifiableMap(tempConsumerDefaultOverrides);

if (CONSUMER_EOS_OVERRIDES.containsKey(config)) {
    if (!clientProvidedProps.get(config).equals(CONSUMER_EOS_OVERRIDES.get(config))) {
        log.warn(String.format(nonConfigurableConfigMessage, "consumer", config, eosMessage, clientProvidedProps.get(config), CONSUMER_EOS_OVERRIDES.get(config)));
        clientProvidedProps.remove(config);
    }
}

1 个答案:

答案 0 :(得分:1)

主题不是事务性的,这意味着生产者不使用事务并且不写主题对使用EOS的Kafka Streams应用程序没有影响。在Kafka Streams中启用EOS意味着记录仅在Kafka Streams中处理一次。虽然您可以在流中使用幂等生成器(不可能仅使用事务性生成器),但根据您在此处展示的用例,我认为您不需要。