Spring Cloud Stream partitionKeyExpression计算错误

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

我有一个使用Kafka的基于Spring云流的微服务

我创建了一个带有4个分区的卡夫卡主题

我在yml中配置了以下内容:

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