卡夫卡流时间戳提取器在KGroupedStream上失败

时间:2019-06-07 21:47:34

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

我正在构建一个春季云微服务,该服务使用来自kafka主题的数据。在使用者中,我将主题绑定到KStream。由于kafka的版本低于0.10,因此传入的消息不包含时间戳。当我解析传入的值时,它工作正常。否则,当我按键对它们进行分组时,它不使用“ default.timestamp.extractor”(已设置为org.apache.kafka.streams.processor.WallclockTimestampExtractor)。

此服务我已经使用不同版本的kafka(高于或等于0.10)对其进行了测试,并且效果很好。

这是我的配置:

春天:   云:     流:       卡夫卡:         流:           活页夹:             经纪人:$ {KAFKA_BROKERS}             applicationId:电子邮件消息流             组态:               default.key.serde:org.apache.kafka.common.serialization.Serdes $ StringSerde               default.value.serde:org.apache.kafka.common.serialization.Serdes $ StringSerde               commit.interval.ms:1000               default.timestamp.extractor:org.apache.kafka.streams.processor.WallclockTimestampExtractor               poll.ms:60000#等待更多消息的阻塞时间               buffered.records.per.partition:2000

我的代码的一部分:

    stream
        .mapValues(this::mapMessage)
        .groupBy(this::buildGroup, Serialized.with(new JsonSerde<>(Group.class), new JsonSerde<>(EmailMessage.class)))
        .windowedBy(TimeWindows.of(WINDOW_TIME))
        .aggregate(ArrayList::new, this::aggregate, Materialized.with(new JsonSerde<>(Group.class), new MessageListSerialization()))
        .toStream()
        .process(() -> new MailMessagesProcessor(emailService));

这引发了我这个错误:org.apache.kafka.streams.errors.StreamsException:输入记录ConsumerRecord(topic = .....)使用另一个TimestampExtractor处理此数据。

1 个答案:

答案 0 :(得分:0)

Kafka Streams需要经纪人0.10.0或更高版本。它与较早的经纪人不兼容。

  • Kafka Streams 0.10.0,仅与0.10.0(或更高版本)的代理兼容。

  • Kafka Streams 0.10.1和更高版本,向后兼容0.10.1(但不兼容较旧的代理),并且兼容较新的代理。

  • 此外,由于Kafka Streams 1.0,要求消息格式为0.10(或更高)。因此,即使将代理升级到0.10.0(或更高版本),如果您的消息格式也没有升级,也将无法使用。

  • 要使用“完全一次”功能,必须使用0.11.0(或更高)的代理版本。

有关更多详细信息,请参见:https://docs.confluent.io/current/streams/upgrade-guide.html#compatibility