KStreams-聚合和groupByKey是否保证顺序?

时间:2019-10-06 14:24:57

标签: java apache-kafka apache-kafka-streams

想象一下这样的情况:我有一个主题,状态很多,每个状态在其他日志中都具有相同的键。这些状态的顺序是已知的,并且始终相同,例如:创建,付款,交付等。

因此,如果order相同且在profileEvent.parcelEvent下面的代码中已知(并且创建状态为第一),则必须始终存在。但这没有发生,我在其他if(已付费)或if(已交付)部分中得到了空指针异常。这证明创建的部分不会首先执行。

问题是为什么会这样,假设消息顺序正确?

                .groupByKey()
            .aggregate(
                    CustomerProfileEvent::new,
                    (key, value, profileEvent) -> {
                        if (created) {
                            Parcel parcel = value.getParcel();

                            return CustomerProfileEvent.newBuilder()
                                    .setEventTimestamp(value.getHeader().getTimestamp())
                                    .setParcelEvent(CustomerProfileParcelEvent.newBuilder()
                                            .setEventName(parcelCreated)
                                            .setParcelCode(parcel.getParcelCode().toString())
                                            .build())
                                    .build();
                        }else if(paid){
                            do some action on profileEvent.parcelEvent
                        }else if(deliverd){
                            do some action on profileEvent.parcelEvent
                        }

                        return profileEvent;
                    },
                    Materialized.as(Stores.persistentKeyValueStore(applicationConfig.getParcelEventAggregationTopicName()))
                            .withKeySerde((Serde) Serdes.String())
                            .withValueSerde(avroSerdeHelper.createCustomerProfileEventSerde())
                            .withCachingDisabled()
            );

0 个答案:

没有答案