Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/6.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 spark 使用带Spark的卡夫卡的优势超过仅使用Spark_Apache Spark_Apache Kafka_Stream Processing - Fatal编程技术网

Apache spark 使用带Spark的卡夫卡的优势超过仅使用Spark

Apache spark 使用带Spark的卡夫卡的优势超过仅使用Spark,apache-spark,apache-kafka,stream-processing,Apache Spark,Apache Kafka,Stream Processing,卡夫卡很常见。很多公司都使用它。我完全理解卡夫卡和斯帕克是如何工作的,我对他们都很有经验。我不明白的是用例。你为什么要将卡夫卡与Spark一起使用,而不仅仅是Spark 在我看来,Kafka的主要用途是作为ETL管道中用于实时(流)数据的暂存区域 我设想有一个数据源集群,数据最初存储在其中。例如Vertica、Cassandra、Hadoop等 然后是一个处理集群,它从数据源集群读取数据,并将其写入分布式Kafka日志,这基本上是一个暂存数据集群 然后还有另一个处理集群——Spark集群,它从K

卡夫卡很常见。很多公司都使用它。我完全理解卡夫卡和斯帕克是如何工作的,我对他们都很有经验。我不明白的是用例。你为什么要将卡夫卡与Spark一起使用,而不仅仅是Spark

在我看来,Kafka的主要用途是作为ETL管道中用于实时(流)数据的暂存区域

我设想有一个数据源集群,数据最初存储在其中。例如Vertica、Cassandra、Hadoop等

然后是一个处理集群,它从数据源集群读取数据,并将其写入分布式Kafka日志,这基本上是一个暂存数据集群

然后还有另一个处理集群——Spark集群,它从Kafka读取数据,对数据进行一些转换和聚合,并将数据写入最终目的地

如果我的想象是正确的,我可以从中间剪掉卡夫卡,在Spark集群上运行的Spark程序中,驱动程序将从原始源读取数据,并将其并行处理。把卡夫卡放在中间的优势是什么?


您能给我一些具体的使用案例,其中Kafka很有帮助,而不是一开始就读取数据来激发灵感,而不必经过Kafka吗?

Kafka Streams直接解决了流处理中的许多难题:

  • 具有毫秒延迟的一次事件处理(非微批处理)
  • 状态完整处理,包括分布式连接和聚合
  • 方便的DSL
  • 使用类似数据流的模型打开无序数据的窗口
  • 具有快速故障切换的分布式处理和容错功能
  • 无停机滚动部署
ApacheSpark可以与Kafka一起使用来流式传输数据,但是如果您仅为这个新应用程序部署Spark集群,那么这无疑是一个巨大的复杂性打击

只有卡夫卡和你的申请。它还可以在添加应用程序的新实例或现有实例崩溃时平衡处理负载。并维护表的本地状态,帮助从故障中恢复

那么,您应该使用什么呢?

低延迟和易于使用的事件时间支持也适用于 卡夫卡河。这是一个相当集中的图书馆,而且非常有趣 非常适合某些类型的任务。这也是为什么它的一些 设计可以如此优化卡夫卡的工作方式您不需要设置 任何一种特殊的卡夫卡流集群,都没有集群 经理。如果你需要做一个简单的卡夫卡主题对主题 转换、按键计数元素、使用来自 另一个主题,或运行聚合或仅实时处理- 卡夫卡溪流是给你的

如果事件时间不相关且秒范围内的延迟为 可以接受,Spark是第一选择。它稳定,几乎可以任意选择 这种类型的系统可以很容易地集成。此外,它还附带 每个Hadoop发行版。此外,用于批处理的代码 应用程序也可以作为流媒体应用程序使用 API是相同的

卡夫卡可以很容易地在一个主题中处理多个来源,但在Spark中处理相同的来源会很复杂。但在卡夫卡的帮助下,它变得非常简单


链接参考:

在一些公司,数据作为主存储写入Kafka。从那里,它会被写到卡桑德拉、Hadoop等等。除此之外,卡夫卡的API不仅仅是生产者和消费者。对于其他流媒体技术以及(例如Streamset、Flink、Beam)@cricket_007,我们可以问同样的问题,假设我们正在谈论一家在线广告公司,它有一个Java Netty web服务器,接收关于广告印象或点击的请求,通知它,所以如果我没记错的话,Netty web服务器将印象和点击直接从内存写入Kafka,作为存储此数据的第一个数据存储,然后Spark/Flink/Storm/Samza从Kafka读取数据,进行处理,并以更结构化的方式将其写入Cassandra/Hadoop/等。。我说的对吗?它不一定是JavaWeb服务,但是是的,这完全是错误的possible@cricket_007我知道它不一定是Java。我只是想举个具体的例子。我想现在整个端到端流程对我来说更加清晰了,谢谢。你说卡夫卡的可用性比这强。你能给我一个不同场景的例子吗,卡夫卡扮演着不同的角色?卡夫卡流不需要像Spark这样的独立集群来转换、过滤和加入卡夫卡事件。Kafka Connect可用于在外部系统之间传输消息,在大多数情况下只需要配置文件,而不是像Spark中那样不断编写相同的ETL代码,或调整执行器和内存。。。这些是生产者/消费者之外的API