您了解微批次与流处理是正确的。您也是对的,所有三个系统都使用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 (在Confluent博客中也有关于Kafka Streams的有趣帖子: http://www.confluent.io/blog/ )