Spring EmbeddedKafka:KTable-KTable leftJoin空的右侧

时间:2018-07-18 19:51:16

标签: apache-kafka apache-kafka-streams spring-kafka

我正在嵌入式Kafka实例上编写KStreams集成测试(la spring-kafka-test,see this example)。我有两对主题,每对的第一个主题直接进入第二个主题,每对处理一个记录。我从每个主题对的后一个主题制作一个KTable,然后将两个Ktables左连接。

ValueJoiner唯一运行时,右侧为null。即使两个记录均到达各自的ktables(已验证)。

我的EmbeddedKafka实例运行时每个主题有2个代理和3个分区。这是流/生产者/消费者配置:

properties.put(StreamsConfig.APPLICATION_ID_CONFIG, appName);
properties.put(StreamsConfig.BOOTSTRAP_SERVERS_CONFIG, bootstrapUrls);
properties.put(StreamsConfig.STATE_DIR_CONFIG, String.format("/tmp/kafka-streams/%s/%s", appName, System.currentTimeMillis()));
properties.put(StreamsConfig.CACHE_MAX_BYTES_BUFFERING_CONFIG, 0);
properties.put(StreamsConfig.CLIENT_ID_CONFIG, appName);
properties.put(StreamsConfig.COMMIT_INTERVAL_MS_CONFIG, 1000);
properties.put(StreamsConfig.REPLICATION_FACTOR_CONFIG, 1);
properties.put(ConsumerConfig.AUTO_OFFSET_RESET_CONFIG, "earliest");
properties.put(ConsumerConfig.GROUP_ID_CONFIG, appName);
properties.put(ConsumerConfig.KEY_DESERIALIZER_CLASS_CONFIG, KafkaAvroDeserializer.class);
properties.put(ConsumerConfig.VALUE_DESERIALIZER_CLASS_CONFIG, KafkaAvroDeserializer.class);
properties.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, KafkaAvroSerializer.class);
properties.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG, KafkaAvroSerializer.class);

禁用通知训练(第4行)

这是相关代码的净化版本:

    KTable<Long, Value> kTableA =
        kstreamBuilder.table(longSerde, valueSerde, topicA2);

    kstreamBuilder.stream(keySerde, envelopeSerde, topicA1)
        .to(longSerde, valueSerde, topicA2);

    kstreamBuilder.stream(keySerde, envelopeSerde, topicB1)
        .to(longSerde, valueSerde, topicB2.topicName);

    KTable<Long, Value> kTableB =
        kstreamBuilder.table(longSerde, valueSerde, topicB2.topicName);

    KTable<Long, Result> resultTable = kTableA.leftJoin(kTableB, (a,b) -> {
        // value joiner called only once, b is null
    }

此帖子与to my other post相关,其中产生了太多记录。烦恼每个主题的kafka代理/分区数量使我陷入了同样令人不快的局面。

在此先感谢您的帮助!

0 个答案:

没有答案