Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache kafka Spring嵌入Kafka:KTable KTable leftJoin null right side_Apache Kafka_Apache Kafka Streams_Spring Kafka - Fatal编程技术网

Apache kafka Spring嵌入Kafka:KTable KTable leftJoin null right side

Apache kafka Spring嵌入Kafka:KTable KTable leftJoin null right side,apache-kafka,apache-kafka-streams,spring-kafka,Apache Kafka,Apache Kafka Streams,Spring Kafka,我正在一个嵌入式kafka实例(la spring kafka测试)之上编写一个KStreams集成测试。我有两对主题,每对的第一个主题直接输入第二个主题,每对处理一条记录。我从每个主题对的后一个主题创建一个KTable,并将两个KTable左键连接起来 ValueJoiner仅在运行时,右侧为空。即使两个记录都达到各自的K表(已验证) 我的EmbeddedKafka实例运行时,每个主题有2个代理和3个分区。以下是流/生产者/消费者配置: properties.put(StreamsConfig

我正在一个嵌入式kafka实例(la spring kafka测试)之上编写一个KStreams集成测试。我有两对主题,每对的第一个主题直接输入第二个主题,每对处理一条记录。我从每个主题对的后一个主题创建一个KTable,并将两个KTable左键连接起来

ValueJoiner仅在运行时,右侧为空。即使两个记录都达到各自的K表(已验证)

我的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
    }
KTable kTableA=
kstreamBuilder.表格(Lonserde,valueSerde,专题2);
kstreamBuilder.stream(keySerde,信封顺序,主题1)
.致(longSerde、valueSerde、专题2);
kstreamBuilder.stream(keySerde、信封顺序、主题B1)
.to(longSerde、valueSerde、topicB2.topicName);
K表K表B=
kstreamBuilder.table(lonserde、valueSerde、topicB2.topicName);
KTable resultable=kTableA.leftJoin(kTableB,(a,b)->{
//值联接程序只调用一次,b为null
}
这篇文章是相关的,因为有太多的记录被制作出来。摆弄每个主题的卡夫卡代理/分区的数量导致了我同样不希望出现的情况


提前感谢您提供的所有帮助!

因此,我一直在摆弄一些使用KTable+KTable连接的测试用例,结果发现问题与直接馈入KTable的流有关。我成功地使用了LeftJoin,并在设置中使用两个KTable连接,而没有前面的流。进一步摆弄发现:when我将每个主题的分区数从3减少到1(代理数固定为3)正确的行为结果:左空、左右。有人能解释存在多个分区时ktable联接的行为吗?