【问题标题】:spring-cloud-stream kafka how to produce message with round robin strategy?spring-cloud-stream kafka 如何使用循环策略生成消息?
【发布时间】:2019-04-20 23:28:37
【问题描述】:

我们已将 spring boot 升级到 2.0.3 版本(之前的 1.5.10)。 因此,我们更改了 kafka 和 spring-cloud-stream (2.0.0-Release) 的发布版本
在我们的属性 YML 文件中,我们并不总是配置 partitionKeyExpression 并且我们的大部分 partitionCount 大于 1。
在以前的版本中,这些设置以及不传递任何密钥会导致在循环策略中生成消息。

在新版本中,相同的设置导致方法 isPartitioned 返回 true,这会添加带有新 PartitionHandler 的拦截器,其中 extractKey 方法由于缺少键而失败(断言消息“分区键不能为空”)。

问题是,我们如何才能以相同的设置或更少的更改来保持以前的行为。我们如何才能保持不使用密钥并确保消息以循环策略进入分区?

【问题讨论】:

    标签: spring-boot apache-kafka spring-cloud-stream


    【解决方案1】:

    现在在决策中使用计数。

    public boolean isPartitioned() {
        return this.partitionCount > 1 || this.partitionKeyExpression != null
                || this.partitionKeyExtractorName != null || this.partitionKeyExtractorClass != null;
    }
    

    我认为这是错误的#1531。

    作为一种解决方法,如果您想使用原生 kafka 分区(并且主题已经存在),请不要设置流 producer.partitionCount。

    【讨论】:

    • 谢谢,它会解决我们的问题,直到下一个版本发布。
    猜你喜欢
    • 2018-03-09
    • 1970-01-01
    • 2018-08-29
    • 2020-12-07
    • 2021-06-12
    • 2021-01-09
    • 1970-01-01
    • 1970-01-01
    • 2019-09-11
    相关资源
    最近更新 更多