(Scala)sparkstreaming手动提交offset到zookeeper中,kafka版本0.10

本文介绍如何在Scala SparkStreaming项目中,针对Kafka 0.10版本,手动将offset提交到Zookeeper。自动提交可能导致数据丢失问题,因此推荐手动提交。文中提供代码示例,启动时从Zookeeper获取offset,并在处理数据后更新。
摘要由CSDN通过智能技术生成

kafka因为版本的不同可能会导致一下接口的差异还有功能等的区别,我用的是0.10版本的kafka,0.8版本的kafka将topic及其分区等元数据是默认保存在zookeeper中,新版本的kafka有一个自带的topic__consumer_offset以存储offset代替zookeeper的相应功能,即:offset会存到kafka中,我们处理kafka中的数据时,kafka有个参数enable.commit.auto,默认为true即kafka会根据默认的时间(好像是5秒)刷新一次offset值,即5秒自动提交一次。这种方式会因为程序等因无法抗拒的因素挂掉导致数据出现问题。一般都选择手动提交,在数据处理逻辑后提交更新后的offset。
可以直接将offset提交到kafka中,此种方式代码简单易实现,
还可以将offset存到zookeeper中,此种方式代码量相对较多。
还可以将offset存到外部数据库中,比如mysql、sqlserver等数据库。
除了这几种方式还可以使用checkpoint,设置检查点的方式去管理offset值。
本次我们就使用zookeeper管理offset值。有相对代码量较少的kafka管理offset,感兴趣的朋友可以去我博客里面看。
废话不多说,上我的代码。

package zookeeper_offset

import org.apache.kafka.clients.consumer.ConsumerRecord
import org.apache.kafka.common.serialization.StringDeserializer
import org.apache.spark.SparkConf
import org.apache.spark.streaming.dstream.InputDStream
import org.apache.spark.streaming.kafka010.ConsumerStrategies.Subscribe
import org.apache.spark.streaming.kafka010.LocationStrategies.PreferConsistent
import org.apache.spark.streaming.kafka010.{HasOffsetRanges, KafkaUtils}
import org.apache.spark.streaming.{Seconds, StreamingContext}

/**
  * spark-streaming读取kafka
  * 适用本版:spark-streaming-kafka-0-10
  * (0.10和0.8的API有较大的区别)
  */
object DirectKafkaManagerMeterData {

  def main(args: Array[String]): Unit = {

    val conf = new SparkConf().setMaster("local[4]").setAppName("Direct
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值