apache-spark - 什么时候 Kafka 连接器比 Spark 流解决方案更受欢迎?

标签 apache-spark apache-kafka apache-kafka-connect spark-structured-streaming

使用 Spark 流,我可以读取 Kafka 消息并将数据写入不同类型的表,例如 HBase、Hive 和 Kudu。但这也可以通过对这些表使用 Kafka 连接器来完成。我的问题是,在哪些情况下我应该更喜欢连接器而不是 Spark 流解决方案。

Kafka 连接器解决方案的容忍度如何?我们知道通过 Spark 流,我们可以使用在多个节点上运行的检查点和执行器进行容错执行,但是 Kafka 连接器如何实现容错(如果可能)?通过在多个节点上运行连接器?

最佳答案

因此,一般来说,简单地从 Kafka 读取记录并将它们发送到其他服务时,功能应该没有太大区别。

Kafka Connect 在处理标准任务时可能更容易,因为它提供了各种开箱即用的连接器,因此很可能会减少编写任何代码的需要。因此,如果您只想将一堆记录从 Kafka 复制到 HDFS 或 Hive,那么使用 Kafka 连接可能会更容易、更快。

考虑到这一点,当您需要做一些非标准的事情时,Spark Streaming 会彻底接管,即如果您想对记录执行一些聚合或计算并将它们写入 Hive,那么您可能应该从一开始就使用 Spark Streaming。

一般来说,我发现使用 Kafka connect 做一些不合标准的事情,例如将一条消息拆分为多条消息(假设它是例如 JSON 数组)非常麻烦,并且通常需要比在 Spark 中做更多的工作。

至于 Kafka Connect 容错,正如文档中所述,这是通过使用相同的 group.id 运行多个分布式工作程序来实现的。 ,如果其中一个失败,工作人员会重新分配任务和连接器。

关于apache-spark - 什么时候 Kafka 连接器比 Spark 流解决方案更受欢迎?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62194419/

相关文章:

java - 我知道如何在数据集上执行 orderBy ("a"、 "b"...)、groupBy。我需要独立地对每个记录子集进行计算和处理

go - Kafka 消费组丢失未提交的消息

cassandra - 如何在没有 Confluence 的情况下使用 Kafka Connect for Cassandra

apache-spark - 为什么Spark将Map阶段输出保存到本地磁盘?

scala - 为什么 Spark 会失败并出现 java.lang.OutOfMemoryError : GC overhead limit exceeded?

apache-spark - 将 Spark 结构化流输出写入 Kafka 主题

apache-kafka - 卡夫卡 : deleting messages from topics with retention "compact"

java - Spring Kafka - 如何使用组 ID 将偏移量重置为最新?

java - 如何防止使用 Kafka 连接接收器插入 Kafka 消息中不需要的属性?

MySQL Debezium 卡夫卡 : schema isn't known to this connector