在 Docker 时代,很容易在我的整个集群中扩展这个 worker
如果您已经拥有可用的基础设施,那就太好了,使用它。将您的 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 对某些人来说可能并不难,但知道如何有效地使用它并调整适当的资源可能是