首页 > 解决方案 > Kafka Streams 复制因子不适用于状态存储更改日志主题

问题描述

我们通过 Spring Cloud Stream 集成使用 Kafka Streams。我通过设置配置了要在所有内部 Kafka Streams 主题中使用的复制因子

spring.cloud.stream.kafka.streams.binder.configuration.replication.factor=${REPL_FACTOR}

它适用于 Kafka Streams 内部使用的大多数重新分区/更改日志主题。但是,此设置似乎对通过手动创建的状态存储更改日志主题没有影响Materialized#as(StoreSupplier)。对于这些主题,我仍然可以看到复制因子设置为默认值 1。也无法使用它进行设置,Materialized#withLoggingEnabled(Map<String, String>)因为它只接受主题级别的配置(replication.factor是 Streams 配置)。这是 Kafka Streams 中的一个已知错误吗?我什么也找不到。如果是这样,是否有解决方法来增加这些更改日志主题的复制因子?

我们在代理端使用 Kafka v2.3.1,在客户端使用 2.5.0。

标签: apache-kafkaapache-kafka-streamsspring-cloud-stream

解决方案


从 2.4 版开始,AdminClient现在可以将复制因子设置为 -1 in NewTopic,这意味着default.replication.factor在创建主题时应该使用 —— KIP-464

但是,Kafka Streams 目前似乎没有使用此功能。为此,有一个开放的问题KAFKA-8531

您可以使用设置内部主题的复制因子

StreamsConfig.REPLICATION_FACTOR_CONFIG)

https://kafka.apache.org/documentation/#replication.factor

流处理应用程序创建的更改日志主题和重新分区主题的复制因子。

由于您正在通过活页夹配置进行设置,因此它应该可以按预期工作。

编辑

您使用的是什么版本的 spring-cloud-stream?我刚刚用 3.0.8 进行了测试,它按预期工作。

spring.cloud.stream.kafka.streams.binder.configuration.replication.factor: 3

2020-10-15 12:03:55,601 错误 [kafka-stre] OakspiStreamThread:673 - 流线程 [kafka-streams-inventory-processor-b8d07a5a-f3c4-476a-a265-119163d2acb7-StreamThread-1] 遇到以下意外Kafka 处理过程中出现异常,这通常表示 Streams 内部错误:org.apache.kafka.streams.errors.StreamsException: Could not create topic kafka-streams-inventory-processor-inventory-counts-changelog。

引起:org.apache.kafka.common.errors.InvalidReplicationFactorException:复制因子:3大于可用代理:1。


推荐阅读