Ste*_*Kuo 6 apache-kafka spark-streaming apache-storm apache-flink apache-kafka-streams
在火花流中,我们设置批次间隔以进行近乎实时的微量分批处理.在Flink(DataStream)或Storm中,流是实时的,所以我猜没有批处理间隔的这种概念.
在kafka中,消费者正在拉动,我想Spark使用批处理间隔参数来从Kafka经纪商中提取消息,那么Flink和Storm如何做呢?我想Flink和Storm在快速循环中拉出Kafka消息以形成实时流源,如果是这样的话,如果我将Spark批处理间隔设置为小,如100ms,50ms甚至更小,我们是否在Spark之间有显着差异流媒体和Flink或风暴?
同时,在Spark中,如果流数据量很大且批处理间隔太小,我们可能会遇到有大量数据需要处理的情况,因此我们会看到OutOfMemmory发生变化.它会发生在Flink还是Storm?
我已经实现了一个应用程序来进行主题到主题的转换,转换很容易,但源数据可能很大(考虑它是一个物联网应用程序).我的原始实现由reactive-kafka支持,它在我的独立Scala/Akka应用程序中运行良好.我没有实现要集群的应用程序,因为如果我需要它,Flink/Storm/Spark已经存在.然后我找到了Kafka Stream,对我来说,它与客户端使用的视图类似于reactive-akka.因此,如果我在独立应用程序或微服务中使用Kafka Stream或reactive-kafka,我们是否必须关注客户端代码的可靠性/可用性?
Mat*_*Sax 13
您了解微批次与流处理是正确的.您也是对的,所有三个系统都使用Kafka提供的标准Java使用者来提取数据以便在无限循环中进行处理.
主要区别在于Spark需要为其处理的每个微批量安排一个新工作.并且这种调度开销非常高,因此Spark无法有效处理非常低的批处理间隔,如100ms或50ms,因此这些小批量的吞吐量会下降.
Flink和Storm都是真正的流式系统,因此它们在启动时仅部署作业一次(并且作业持续运行直到用户明确关闭),因此它们可以处理每个单独的输入记录而无需开销和非常低的延迟.
此外,对于Flink,JVM主存不受限制,因为如果可用的主存储器太小,Flink可以使用头外存储器以及写入磁盘.(顺便说一下:自项目Tungsten以来的Spark,也可以使用堆外内存,但它们可以在某种程度上溢出到磁盘 - 但与Flink AFAIK不同).Storm,AFAIK既不会也不会限制JVM内存.
我不熟悉被动的卡夫卡.
对于Kafka Streams,它是一个完全容错,有状态的流处理库.它是微服务开发的设计(您不需要像Flink/Storm/Spark那样的专用处理集群),但可以在任何地方以任何方式部署您的应用程序实例.您只需启动更多实例即可扩展应用程序.查看文档以获取更多详细信息:http://docs.confluent.io/current/streams/index.html(在汇编博客中也有关于Kafka Streams的有趣帖子:http://www.confluent.io/blog/)
| 归档时间: |
|
| 查看次数: |
3154 次 |
| 最近记录: |