2017-04-25 16 views
1

对于使用kafka的Spark流式传输,我们有Directstream,它是无接收器的方法,并映射kafka分区来激发RDD分区。目前,我们有一个应用程序,我们使用Kafka Direct方法并在RDBMS中维护我们的偏移量,接收器减少火花蒸汽的方法

我们有类似的Kinesis吗?当我阅读spark-Kinesis集成的文档时,感觉就像检查点中存在差异。以下是我的一些问题

  1. 是否使用kinesis流映射kinesis碎片到RDD分区?如果我在传入的RDD上使用forEachPartition,我能否在碎片级别维护有序处理?
  2. 从文档中可以看出,kinesis在dynamoDB中保持单独的检查点?不能忽略它,并使用我们自己的偏移量管理?
  3. 在KinesisUtils.createStream api我看到,[初始位置]变量只需要LATEST或TRIM_HORIZON。在那种情况下,我怎么能不能提供碎片地图抵消,因为我在卡夫卡案件提供?

如果我们的应用程序是幂等的,我们如何才能精确地处理一次处理?

回答

0

是否使用kinesis进行流式传输将kinesis分片映射到RDD分区?

否,不存在1:室壁运动碎片和RDD分区之间1映射作为documentation指出:

有室壁运动流碎片的数量和RDD分区的数量之间没有相关性/在输入DStream处理期间跨Spark集群创建的分片。这些是2个独立的分区方案在碎片级别


我能保持有序的处理,如果我传入RDD使用forEachPartition?

每创建的分区,为了维持内部(不知道,可以帮助):

室壁运动数据处理每分区有序和AT-至少每个消息中出现一次。


从文档它解释说,室壁运动保持独立的检查站dynamoDB?不能忽略它,并使用我们自己的偏移量管理?

不,你受到Kinesis客户端实现的约束,该实现使用DyanmoDB作为后备存储。

在KinesisUtils.createStream API我看到,对于[初始位置]变量只需要最新或TRIM_HORIZON。在那种情况下,我怎么能不能提供碎片地图抵消,因为我在卡夫卡案件提供?

号没有卡夫卡偏移提供相等。

正如你所看到的,目前执行的室壁运动API限制你。如果您需要偏移量存储和恢复的灵活性,并且想要实现一次语义,请考虑与Kafka一起使用该解决方案。

+0

感谢您的答复。在那种情况下,kinesis远远超过kafka。这对我的云迁移来说是个大问题。我有两个关键应用程序只使用一次火花流。 –