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

问题描述 投票:0回答:1

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

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

apache-spark apache-kafka datatable spark-streaming spark-streaming-kafka
1个回答
4
投票

所以,一般来说,单纯从Kafka读取记录并将其发送到其他服务中,功能上应该没有太大的区别。

当涉及到标准任务时,Kafka Connect可能更容易,因为它提供了各种开箱即用的连接器,所以很可能会减少编写任何代码的需求。所以,如果你只是想把一堆记录从Kafka复制到HDFS或Hive,那么使用Kafka connect可能会更容易和更快。

考虑到这一点,当你需要做一些非标准的事情时,Spark Streaming就会急剧接管,例如,如果你想在记录上执行一些聚合或计算,并将它们写入Hive,那么你可能应该从一开始就选择Spark Streaming。

总的来说,我发现用Kafka connect做一些不标准的事情,比如说把一个消息拆成多个(假设是JSON数组)是相当麻烦的,而且经常需要比在Spark中更多的工作。

至于Kafka Connect的容错性,按照文档中的描述,这是通过运行多个分布式工作者,用相同的 group.id如果其中一个失败,工人们会重新分配任务和连接器。


2
投票

在哪些情况下,我应该选择连接器而不是Spark流解决方案。

"这取决于":-)

  1. Kafka Connect是Apache Kafka的一部分,所以在安全性、交付语义等方面与Apache Kafka有更紧密的集成。
  2. 如果你不想写任何代码,Kafka Connect更容易,因为它只是JSON来配置和运行的
  3. 如果你还没有使用Spark,Kafka Connect可以说是更直接的部署(运行JVM,传入配置)。
  4. 作为一个框架,Kafka Connect的可移植性更强,因为概念是一样的,你只需要每次为你要集成的技术插入相应的连接器就可以了
  5. Kafka Connect为你处理所有棘手的事情,比如模式、偏移、重启、scaleout等等等等。
  6. Kafka Connect支持Single Message Transform,用于在数据通过管道时对其进行更改(屏蔽字段、丢弃字段、更改数据类型等)。对于更高级的处理,你会使用类似Kafka Streams或ksqlDB的东西。
  7. 如果你使用的是Spark,而且工作得很好,那么撕掉它来代替使用Kafka Connect不一定是谨慎的:) 。

另外Kafka连接器方案的容错性如何?...Kafka连接器如何实现容错(如果可能的话)?

  1. Kafka Connect可以在分布式模式下运行,即在节点间有一个或多个worker进程。如果一个worker出现故障,Kafka Connect会重新平衡其余worker的任务。如果你添加一个worker进来,Kafka Connect会重新平衡以确保工作负载分布。这在Apache Kafka 2.3 (KIP-415)
  2. Kafka Connect使用Kafka消费者API,并在Kafka本身中跟踪交付给目标系统的记录的偏移。如果任务或worker失败,你可以确信它将从正确的点重新启动。许多连接器也支持精确的一次交付(如HDFS、Elasticsearch等)。

如果你想了解更多关于Kafka Connect的信息,请看这里。这里的文档 和我 说话 见一 这里的连接器列表和教程视频 此处.


声明:我在Confluent工作,也是Kafka Connect的忠实粉丝:-)

© www.soinside.com 2019 - 2024. All rights reserved.