通过Spark流媒体,我可以读取Kafka消息,并将数据写入不同类型的表,例如HBase、Hive和Kudu,但这也可以通过为这些表使用Kafka连接器来实现。但这也可以通过为这些表使用Kafka连接器来完成。我的问题是,在哪些情况下,我应该选择连接器而不是Spark流解决方案。
另外Kafka连接器解决方案的容忍度如何?我们知道,使用Spark流媒体,我们可以使用在多个节点上运行的检查点和执行器来实现容错执行,但是使用Kafka连接器如何实现容错(如果可能的话)?通过在多个节点上运行连接器?
所以,一般来说,单纯从Kafka读取记录并将其发送到其他服务中,功能上应该没有太大的区别。
当涉及到标准任务时,Kafka Connect可能更容易,因为它提供了各种开箱即用的连接器,所以很可能会减少编写任何代码的需求。所以,如果你只是想把一堆记录从Kafka复制到HDFS或Hive,那么使用Kafka connect可能会更容易和更快。
考虑到这一点,当你需要做一些非标准的事情时,Spark Streaming就会急剧接管,例如,如果你想在记录上执行一些聚合或计算,并将它们写入Hive,那么你可能应该从一开始就选择Spark Streaming。
总的来说,我发现用Kafka connect做一些不标准的事情,比如说把一个消息拆成多个(假设是JSON数组)是相当麻烦的,而且经常需要比在Spark中更多的工作。
至于Kafka Connect的容错性,按照文档中的描述,这是通过运行多个分布式工作者,用相同的 group.id
如果其中一个失败,工人们会重新分配任务和连接器。
在哪些情况下,我应该选择连接器而不是Spark流解决方案。
"这取决于":-)
另外Kafka连接器方案的容错性如何?...Kafka连接器如何实现容错(如果可能的话)?
如果你想了解更多关于Kafka Connect的信息,请看这里。这里的文档 和我 说话 见一 这里的连接器列表和教程视频 此处.
声明:我在Confluent工作,也是Kafka Connect的忠实粉丝:-)