Spring Cloud Stream partitionKeyExpression计算错误
我有一个使用Kafka的基于Spring云流的微服务 我创建了一个带有4个分区的卡夫卡主题 我在yml中配置了以下内容:Spring Cloud Stream partitionKeyExpression计算错误,spring,stream,apache-kafka,cloud,partitioning,Spring,Stream,Apache Kafka,Cloud,Partitioning,我有一个使用Kafka的基于Spring云流的微服务 我创建了一个带有4个分区的卡夫卡主题 我在yml中配置了以下内容: spring: cloud: stream: bindings: SYNC_TABLE: content-type: application/json partitionKeyExpression: payload.partitionKey partitionCount: 4
spring:
cloud:
stream:
bindings:
SYNC_TABLE:
content-type: application/json
partitionKeyExpression: payload.partitionKey
partitionCount: 4
destination: ${envTopicPrefix}.LEGACY_TABLE
在我的代码中,我的message类包含(在其超类中)partitionKey变量:
@Data
@EqualsAndHashCode(callSuper=true)
@ToString(callSuper=true)
public class TransactionResponse extends GeneralOutputMessage{
}
我的期望是spring cloud stream将获取键payload.partitionKey,计算其hashCode()%4,并将事件发送到该分区 然而,逻辑是完全随机的。以下是几个例子: Math.abs(“111615631.hashCode()%4)=1。但是,消息被发送到分区3 Math.abs(“110019882”.hashCode()%4)=2。但是,消息被发送到分区号0 Math.abs(“943152574.hashCode()%4)=0。此消息确实会发送到分区号0 Math.abs(“943198862.hashCode()%4)=0。但是,此消息被发送到分区2 我用的是Dalston.SR1释放列车 我错过了什么 谢谢 更新:
只是尝试用相同的partitionKey发送相同的事件(但消息体略有不同)。即使分区键相同,消息也会发送到两个不同的分区。看起来Spring Cloud Stream完全忽略了partitionKeyExpression 这是我的错误,我忘了在yml中添加producer:部分:
spring:
cloud:
stream:
bindings:
SYNC_TABLE:
content-type: application/json
producer:
partitionKeyExpression: payload.partitionKey
partitionCount: 4
destination: ${envTopicPrefix}.LEGACY_TABLE
这是我的错误,我忘了在yml中添加producer:部分:
spring:
cloud:
stream:
bindings:
SYNC_TABLE:
content-type: application/json
producer:
partitionKeyExpression: payload.partitionKey
partitionCount: 4
destination: ${envTopicPrefix}.LEGACY_TABLE
spring:
cloud:
stream:
bindings:
SYNC_TABLE:
content-type: application/json
producer:
partitionKeyExpression: payload.partitionKey
partitionCount: 4
destination: ${envTopicPrefix}.LEGACY_TABLE