Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/7.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
Join 如何捕捉卡夫卡记录,不';不符合卡夫卡流连接的条件?_Join_Apache Kafka_Apache Kafka Streams - Fatal编程技术网

Join 如何捕捉卡夫卡记录,不';不符合卡夫卡流连接的条件?

Join 如何捕捉卡夫卡记录,不';不符合卡夫卡流连接的条件?,join,apache-kafka,apache-kafka-streams,Join,Apache Kafka,Apache Kafka Streams,我通过加入一个kstream和一个ktable来丰富数据。kstream包含车辆发送的消息,ktable包含车辆数据。 我遇到的问题是,我想从表中没有相应连接键的流中捕获消息。 卡夫卡流会自动跳过没有连接匹配的记录。 是否有办法将这些记录发送到不同的主题,以便以后可以处理它们 StreamsBuilder builder = new StreamsBuilder(); final KTable<String, VinMappingInfo> vinMappingTab

我通过加入一个kstream和一个ktable来丰富数据。kstream包含车辆发送的消息,ktable包含车辆数据。 我遇到的问题是,我想从表中没有相应连接键的流中捕获消息。 卡夫卡流会自动跳过没有连接匹配的记录。 是否有办法将这些记录发送到不同的主题,以便以后可以处理它们

StreamsBuilder builder = new StreamsBuilder();
        final KTable<String, VinMappingInfo> vinMappingTable = builder.table(vinInfoTopic, Consumed.with(Serdes.String(), valueSerde));
        KStream<String, VehicleMessage> vehicleStream = builder.stream(sourceTopic);
        vehicleStream.join(vinMappingTable, (vehicleMsg, vinInfo) -> {
            log.info("joining {} with vin info {}", vehicleMsg.getPayload().getId(), vinInfo.data.vin);
            vehicleMsg.setVin(vinInfo.data.vin);
            return vehicleMsg;
        }, Joined.with(null, null, valueSerde))
                .to(destinationTopic);

        final Topology topology = builder.build();
        log.info("The topology of connected processor nodes: \n {}", topology.describe());
        KafkaStreams streams = new KafkaStreams(topology, config);
        streams.cleanUp();
        streams.start();
StreamsBuilder builder=newstreamsbuilder();
final KTable vinMappingTable=builder.table(vinInfoTopic,consumered.with(Serdes.String(),valueSerde));
KStream vehicleStream=builder.stream(sourceTopic);
vehicleStream.join(VIN映射表,(VehicleSG,VIN信息)->{
log.info(“将{}与vin信息{},vehicleMsg.getPayload().getId(),vinInfo.data.vin连接起来”);
车辆设置vin(vin信息数据vin);
返回车辆SG;
},连接。使用(null,null,valueSerde))
.至(目的地);
最终拓扑=builder.build();
log.info(“连接的处理器节点的拓扑:\n{}”,topology.descripe());
KafkaStreams streams=新的KafkaStreams(拓扑,配置);
streams.cleanUp();
streams.start();

您可以使用左连接:

stream.leftJoin(表,…);

这确保了输入流中的所有记录都在输出流中。对于这种情况,将使用
apply(streamValue,null)
调用
ValueJoiner

您可以使用左连接:

stream.leftJoin(表,…);

这确保了输入流中的所有记录都在输出流中。对于这种情况,
ValueJoiner
将使用
apply(streamValue,null)
调用。

您好Matthias J.Sax,我正在尝试获取窗口期过期后在KStream到KStream join期间未处理的事件。如果连接流数据稍后到达,这是用于重试的。这是不容易做到的。@matthias-j-sax有什么办法可以识别吗???因为,我现在正在使用KStream连接窗口,所以一个流可能会延迟1天、2天或3天。我不想有这么大的窗口/宽限期。从那时起,我的应用程序每天将有高达5000万个事件的数据流。所以我想以不同的方式识别非连接消息和处理。感谢您的帮助,所以请解决此问题。您可以使用上游
transformValue
手动跟踪“流时间”并“分支”记录,这些记录将在连接前端删除。“流时间”只是看到的最大事件时间戳,因此易于计算——然而,您可能需要一个状态存储来使跟踪容错(直到KIP-622着陆:)嗨,Matthias J.Sax,我正在尝试获取在窗口期过期后KStream到KStream连接期间未处理的事件。如果连接流数据稍后到达,这是用于重试的。这是不容易做到的。@matthias-j-sax有什么办法可以识别吗???因为,我现在正在使用KStream连接窗口,所以一个流可能会延迟1天、2天或3天。我不想有这么大的窗口/宽限期。从那时起,我的应用程序每天将有高达5000万个事件的数据流。所以我想以不同的方式识别非连接消息和处理。感谢您的帮助,所以请解决此问题。您可以使用上游
transformValue
手动跟踪“流时间”并“分支”记录,这些记录将在连接前端删除。“流时间”只是所看到的最大事件时间戳,因此易于计算——然而,您可能需要一个状态存储以使跟踪容错(直到KIP-622着陆:)