我看官方文档说可以通过事务来保证数据消费的exactly once
dstream.foreachRDD { (rdd, time) => rdd.foreachPartition { partitionIterator => val partitionId = TaskContext.get.partitionId() val uniqueId = generateUniqueId(time.milliseconds, partitionId) // use this uniqueId to transactionally commit the data in partitionIterator }}
我有个疑惑:当我对某个batch的数据只写入了一个partition数据时,整个应用挂了,下次重启后,对上次没有消费成功的数据进行重新消费,但此时的time时间点变了,那重启前的那个分区id和重启后的分区id就不一样了,那这个分区的数据不就重复写入了吗?