我来寻求关于奥术的知识。
首先,我有两对主题,每对主题中的一个对另一个主题产生影响。后面的主题将形成两个KTable,它们在KTable + KTable leftJoin中使用。问题是,当我向任一KTable生成单个记录时,leftJoin会生成三个记录。我希望有两个记录的格式为(A-null,A-B),但我却得到了(A-null,A-B,A-null)。我已经确认KTables各自收到一条记录。
我摆弄了CACHE_MAX_BYTES_BUFFERING_CONFIG来启用/禁用状态存储缓存。上面的行为是CACHE_MAX_BYTES_BUFFERING_CONFIG设置为0。当我使用CACHE_MAX_BYTES_BUFFERING_CONFIG的默认值时,我从联接中看到以下记录输出:(A-B,A-B,A空)
以下是流,消费者,生产者的配置:
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",
properties.put(StreamsConfig.CACHE_MAX_BYTES_BUFFERING_CONFIG, 0); // fiddled with
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.cla
properties.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, KafkaAvroSerializer.class);
properties.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG, KafkaAvroSerializer.class);
下面遇到此行为的Processor API代码(经过消毒),请注意与[A1,A2]和[B1,B2]成对的主题:
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> joinTable = kTableA.leftJoin(kTableB, (a,b) -> {
// value joiner called three times with only a single record input
// into topicA1 and topicB1
});
joinTable.groupBy(...)
.aggregate(...)
.to(longSerde, aggregateSerde, outputTopic);
预先感谢您提供的所有帮助,哦,仁慈。
更新: 我运行的是一台kafka服务器,每个主题1个分区,并且遇到了这种现象。当我将服务器数量增加到2并将分区数量增加到3时,我的输出变为(A-null)。
在我看来,我需要花更多时间阅读kafka手册...