Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/apache-kafka/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
Java Kafka KStream-拓扑设计_Java_Apache Kafka_Apache Kafka Streams - Fatal编程技术网

Java Kafka KStream-拓扑设计

Java Kafka KStream-拓扑设计,java,apache-kafka,apache-kafka-streams,Java,Apache Kafka,Apache Kafka Streams,我的流是键/值对,我希望通过60秒的聚合以“原始”的形式保存到数据库中。最初我是这样做的: ->foreach / kStreamBuilder.stream->aggregateBy->process 但后来我发现 a.aggregateby()只返回它匹配的对(我需要所有对-匹配或其他) B我可以在.process()阶段使用HashMap实现相同的聚合效果。然后,当调用.sparen

我的流是键/值对,我希望通过60秒的聚合以“原始”的形式保存到数据库中。最初我是这样做的:

                       ->foreach
                     /
kStreamBuilder.stream->aggregateBy->process
但后来我发现

a
.aggregateby()
只返回它匹配的对(我需要所有对-匹配或其他)
B我可以在
.process()
阶段使用HashMap实现相同的聚合效果。然后,当调用
.sparente()
时,我将所有k/v对写入数据库

因此,结果拓扑变为:

kStreamBuilder.stream->foreach

kStreamBuilder.stream->process

问题:
  • 这是一种“合理”的方式来获得写入所有匹配的kv对的结果吗?(所有值通过foreach和任何对+其余值通过处理
  • 在将原始流发送到
    .foreach()
    .process()
    之前,我是否需要(以某种方式)对其进行分割,或者这样做就足够了

  • DSL层中的聚合是为“增量聚合”而设计的,即当前聚合结果加上要“添加”的单个新值。如果您想一次访问60秒窗口的所有“原始记录”,则需要使用处理器API


    如果有两个下游操作符,则无需执行任何操作。记录将自动转发给这两个服务器。但是,请记住,它们不是复制的,也就是说,两个下游操作员将看到每个记录的相同Java对象

    您所指的聚合方法是什么?卡夫卡0.10.0中没有这样的方法。你说的“匹配”是什么意思?您在上面所做的是聚合单个流——我不了解您所匹配的内容。最后,一般来说,我建议不要使用
    foreach()
    转发来自卡夫卡(和卡夫卡流应用程序)的数据;改用卡夫卡连接。一个原因是:Kafka和Kafka Streams很快就会有精确的一次语义,但如果使用
    foreach()
    (b/c此方法是流的黑盒),Kafka->DB管道将失去端到端精确的一次语义。我的错误-它应该引用我想要的结果。
    .forEach
    将记录每个单独的记录,
    .process
    将对多次出现的任何记录进行配对,并将所有内容写入聚合存储。