apache-kafka - 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。
解决方案
从 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。
推荐阅读
- opencv-contrib - ERROR:功能/特性未实现(算法已获得专利......)
- git - 为什么 Github 将我的提交放在另一个帐户下?
- python - Pandas Dataframe/Python:如何在 python 的每次迭代中使用 for 循环更新数据框单元格值?
- python - 尝试在 Python 3.6 中导入 Keras 时出错
- typescript - 如何删除所有未使用的参数/导入,添加缺少的导入,并通过脚本进行美化
- asp.net-mvc - 添加 TagHelper 后,Razor 页面样式不起作用
- reactjs - 如何在 React 中向单页滚动应用程序添加 404 页面?
- react-native - React Native、Expo、Axios 的计算机权限问题
- javascript - 从又一个 webpack-es6-starterkit 导出
- android - 对话框片段未显示