我将主题Kafka的偏移量保存在Hbase上的表中。我将此主题用于计划的作业Spark,并使用以下方法保存偏移量:
def saveOffset(offsetRanges: Array[OffsetRange], tableOfOffset: org.apache.hadoop.hbase.client.Table): Unit = {
if (offsetRanges == null || tableOfOffset == null)
throw new IllegalArgumentException("CAUSE: offsetRanges, tableOfOffset")
else {
offsetRanges.foreach(row => {
val put = new Put(row.topic.getBytes())
put.addColumn(Main, "PARTITION".getBytes(), Bytes.toBytes(row.partition))
put.addColumn(Main, "STARTOFFSET".getBytes(), Bytes.toBytes(row.untilOffset))
tableOfOffset.put(put)
})
}}
每次我开始工作时,我都会阅读主题中的消息,启动foreachRDD并在将记录正确写入Hbase后保存偏移量。
即使在第一次迭代之后,此方法也会保存与OffsetRange的最后偏移。如果我在row.untilOffset
中更改row.fromOffset
,则每次保存范围(0)中的第一个偏移量时,我都会保存。
我需要保存当前偏移量,因为如果我的作业在范围2处崩溃,那么下次我开始作业时需要从范围2开始。
如何保存来自Kafka的当前消息的偏移量?谢谢