spring-cloud-stream kafka如何使用循环策略产生消息?

时间:2018-11-18 11:44:54

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

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

在新发行版中,相同的设置导致方法isPartitioned返回true,这将为Interceptor添加新的PartitionHandler,其中由于缺少密钥而导致extractKey方法失败(声明消息“ Partition key不能为null”)。 br />
问题是,如何用相同的设置或更少的更改来保持以前的行为。我们如何才能不使用密钥并确保消息以循环策略进入分区?

1 个答案:

答案 0 :(得分:1)

现在在决策中使用计数。

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

我认为这是错误的#1531

作为一种变通方法,如果要使用本机kafka分区(并且该主题已存在),请不要设置流producer.partitionCount