保存当前的偏移卡夫卡。我只能保存第一个或最后一个偏移量

时间:2018-11-15 15:47:44

标签: apache-spark apache-kafka

我将主题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的当前消息的偏移量?谢谢

0 个答案:

没有答案