为什么以及何时会选择将 Spark 流与 Kafka 一起使用?
假设我有一个系统每秒通过 Kafka 获取数千条消息。我需要对这些消息应用一些实时分析并将结果存储在数据库中。
我有两个选择:
是否有第二种选择是更好的选择的情况?在我看来,这只是额外的开销。
最佳答案
In a Docker era it is easy to scale this worker through my entire cluster
如果您已经拥有可用的基础设施,那就太好了,使用它。将您的 Kafka 库捆绑在一些带有运行状况检查的最小容器中,但在大多数情况下,它可以正常工作。添加 Kafka 客户端依赖项 + 数据库依赖项是您真正需要的,对吗?
如果您不使用 Spark、Flink 等,您将需要更密切地处理 Kafka 错误、重试、偏移和提交处理,而不是让框架为您处理这些。
我将在这里补充一点,如果您想要 Kafka + 数据库交互,请查看 Kafka Connect API。已有针对 JDBC、Mongo、Couchbase、Cassandra 等的现有解决方案。
如果你需要更完整的处理能力,我会选择 Kafka Streams 而不是需要单独维护一个 Spark 集群,所以这就是“只是 Kafka”
Create a Spark cluster
假设您不想维护它,或者您无法在 YARN、Mesos、Kubernetes 或 Standalone 之间进行选择。如果您正在运行前三个,那么无论如何可能值得考虑在它们上运行 Docker。
您完全正确,它是额外的开销,所以我发现这完全取决于您可用的资源(例如,具有空闲内存资源的现有 Hadoop/YARN 集群),或者您愿意在内部支持(或支付对于供应商服务,例如某些托管解决方案中的 Kafka 和 Databricks)。
另外,Spark 没有运行最新的 Kafka 客户端库(我相信直到 2.4.0 更新到 Kafka 2.0),所以你需要确定这是否是一个卖点。
对于实际的流库,而不是 Spark 批处理,Apache Beam 或 Flink 可能会让您针对 Kafka 执行相同类型的工作负载
通常,为了扩展生产者/消费者,您需要某种形式的资源调度程序。安装 Spark 对某些人来说可能并不困难,但知道如何有效地使用它并调整适当的资源可能是
关于apache-spark - Spark 流 + Kafka 与 Just Kafka,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45262926/