Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/17.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
Scala 卡夫卡河与卡夫卡河_Scala_Akka Stream_Apache Kafka Streams_Typesafe_Stream Processing - Fatal编程技术网

Scala 卡夫卡河与卡夫卡河

Scala 卡夫卡河与卡夫卡河,scala,akka-stream,apache-kafka-streams,typesafe,stream-processing,Scala,Akka Stream,Apache Kafka Streams,Typesafe,Stream Processing,我目前正在与卡夫卡互动,我想知道他们之间有什么不同 我知道基于Akka的方法实现了反应性规范,并处理了kafka streams似乎缺乏的背压功能 使用卡夫卡流比使用卡夫卡流有什么好处 你的问题很笼统,所以我将从我的角度给出一个笼统的回答 首先,我有两个使用场景: 在一些情况下,我从卡夫卡读取数据,对其进行处理,并将一些输出写回卡夫卡,对于这些情况,我只使用卡夫卡流 数据源或接收器不是kafka的情况,对于我使用akka streams的情况 这已经允许我回答关于背压的部分:对于上面的第一个场景

我目前正在与卡夫卡互动,我想知道他们之间有什么不同

我知道基于Akka的方法实现了反应性规范,并处理了kafka streams似乎缺乏的背压功能


使用卡夫卡流比使用卡夫卡流有什么好处

你的问题很笼统,所以我将从我的角度给出一个笼统的回答

首先,我有两个使用场景:

  • 在一些情况下,我从卡夫卡读取数据,对其进行处理,并将一些输出写回卡夫卡,对于这些情况,我只使用卡夫卡流
  • 数据源或接收器不是kafka的情况,对于我使用akka streams的情况
  • 这已经允许我回答关于背压的部分:对于上面的第一个场景,卡夫卡流中存在背压机制

    现在我们只关注上面描述的第一个场景。让我们看看如果我决定停止使用卡夫卡流,我会失去什么:

    • 我的一些流处理器阶段需要一个持久(分布式)状态存储,kafka streams为我提供了它。这是akka streams无法提供的
    • 通过扩展,kafka streams会在流处理器的新实例启动或一个实例被杀死时自动平衡负载。这在同一个JVM中工作,也在其他节点上工作:向上扩展和向外扩展。这不是由akka streams提供的

    这些是对我来说最重要的区别,我希望这对你来说是有意义的

    与Kafka流相比,Akka流的最大优势在于可以实现非常复杂的处理图,这些处理图可以是扇入/扇出循环和反馈循环。如果我没有错的话,卡夫卡流只允许非循环图。在Kafka流之上实现循环处理图将非常复杂

    发现本文很好地总结了
    Kafka流
    提供的分布式设计关注点(补充
    Akka流

    消息排序:Kafka维护一种仅附加的日志,其中存储所有消息,每条消息都有一个序列id,也称为其偏移量。偏移量用于指示消息在日志中的位置。Kafka streams使用这些消息偏移量来维持顺序

    分区:Kafka将主题拆分为多个分区,每个分区在不同的代理之间复制。分区允许分散负载,复制使应用程序具有容错能力(如果代理停机,数据仍然可用)。这对数据分区很好,但我们还需要以类似的方式分布进程。Kafka Streams使用依赖于Kafka组管理的处理器拓扑。这与Kafka消费者用于在代理之间均匀分配负载的组管理相同(此工作主要由代理管理)

    容错:数据复制可确保数据容错。组管理内置了容错功能,因为它在剩余的活动代理实例之间重新分配工作负载

    状态管理:Kafka streams提供由Kafka更改日志主题备份的本地存储,该主题使用日志压缩(只保留给定密钥的最新值)。Kafka日志压缩

    重新处理:当启动新版本的应用程序时,我们可以重新处理从开始到计算新状态的日志,然后将流量重定向到新实例并关闭旧应用程序

    时间管理:“流数据永远不完整,总是会无序到达”,因此必须区分事件时间和处理时间,并正确处理

    作者还说,“使用这个变更日志主题Kafka Stream能够维护应用程序状态的“表视图”

    我认为这主要适用于“应用程序状态”为。。。小的


    对于一个使用“大数据”的数据科学应用程序,由数据挖掘、机器学习模型和业务逻辑组合而成的“应用程序状态”很可能无法通过
    Kafka Streams
    很好地管理

    此外,我认为使用“纯功能事件源运行时”将有助于使突变显式化,并通过对状态突变和IO“效果”(功能编程)的原则性管理,将应用程序逻辑与用于管理状态持久形式的技术分离


    换句话说,业务逻辑不会与Kafka API纠缠。

    Akka Streams作为Akka Actors模型的以数据流为中心的抽象出现。 这些是为JVM构建的高性能库,专门为通用微服务设计


    而就Kafka Streams而言,它们是用于处理无界数据的客户端库。它们用于从卡夫卡主题中读取数据,然后进行处理,并将结果写入新主题。

    我想你误解了我的问题,我特别谈论的是卡夫卡的akka streams,它使用akka stream结构与卡夫卡交互。这就是我所理解的。Akka streams kafka只是一个包装为Akka streams源/汇的kafka消费者/生产者。因此,我的回答似乎是正确的。你认为什么不合适?@FredericA。当卡夫卡是一个源头时,关于缩放的观点也适用于阿克卡流。如果您决定使用akka streams,您不会失去它。@DanielWojda是正确的,它通过为流源定义一个消费者组来工作。这样,每个主题分区将只有一个活动使用者。例如,当使用反应式kafka时,此功能由支持流源的kafka使用者提供。案例2:如果您已经拥有kafka基础结构,您可以只部署kafka connect,并从此处继续。这在