我们已经将 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 />
问题是,如何用相同的设置或更少的更改来保持以前的行为。我们如何才能不使用密钥并确保消息以循环策略进入分区?
答案 0 :(得分:1)
现在在决策中使用计数。
public boolean isPartitioned() {
return this.partitionCount > 1 || this.partitionKeyExpression != null
|| this.partitionKeyExtractorName != null || this.partitionKeyExtractorClass != null;
}
我认为这是错误的#1531。
作为一种变通方法,如果要使用本机kafka分区(并且该主题已存在),请不要设置流producer.partitionCount
。