在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对于某些人来说可能并不困难,但了解如何高效使用它并调整适当的资源可能是有难度的。
DStream
定义,您可以获得计算并行性,如果您的计算量很大,您需要自己处理。 - Yuval Itzchakov