Spark流媒体+ Kafka vs Just Kafka

时间:2017-07-23 08:11:15

标签: apache-spark apache-kafka spark-streaming spark-streaming-kafka

为什么以及何时会选择使用Kafka的Spark流媒体?

假设我有一个系统通过Kafka每秒获得数千条消息。我需要对这些消息应用一些实时分析,并将结果存储在数据库中。

我有两个选择:

  1. 创建我自己的工作人员,从Kafka读取消息,运行分析算法并将结果存储在DB中。在Docker时代,只需使用scale命令就可以轻松地在整个集群中扩展此工作程序。我只需要确保我的分区数量等于或大于我的工作人员,并且一切都很好,我有一个真正的并发性。

  2. 使用Kafka流输入创建Spark群集。让Spark集群进行分析计算,然后存储结果。

  3. 有没有第二种选择是更好的选择?听起来像是一个额外的开销。

1 个答案:

答案 0 :(得分:2)

  

在Docker时代,很容易通过我的整个集群扩展这个工作者

如果您已经拥有该基础架构,那么很好,请使用它。将您的Kafka库捆绑在一些带有运行状况检查的最小容器中,哪些不是,而且大部分都可以正常工作。您真正需要的是添加Kafka客户端依赖项+数据库依赖项,对吧?

如果您不使用Spark,Flink等,则需要更密切地处理Kafka错误,重试,偏移和提交处理,而不是让框架为您处理这些错误。

我将在此处添加,如果您想要Kafka +数据库交互,请查看Kafka Connect API。已有JDBC,Mongo,Couchbase,Cassandra等现有解决方案。

如果你需要更完整的处理能力,我会选择Kafka Streams,而不是需要单独维护一个Spark集群,所以这就是“只是Kafka”

  

创建Spark群集

假设您不想保持这一点,或者您无法在YARN,Mesos,Kubernetes或Standalone之间进行选择。如果你正在运行前三个,那么无论如何都可能值得在这些上运行Docker。

你是完全正确的,这是额外的开销,所以我发现这完全取决于你可用的东西(例如,具有空闲内存资源的现有Hadoop / YARN集群),或者你愿意在内部支持的内容(或支付供应商服务,例如某些托管解决方案中的Kafka& Databricks)。

另外,Spark没有运行最新的Kafka客户端库(直到2.4.0更新到Kafka 2.0,我相信),因此您需要确定这是否是卖点。

对于实际的流媒体库,而不是Spark批处理,Apache Beam或Flink可能会让你对Kafka执行相同类型的工作负载

通常,为了扩展生产者/消费者,您需要某种形式的资源调度程序。对某些人来说,安装Spark可能并不困难,但知道如何有效地使用它并调整适当的资源可以