Flink手动维护kafka的offset

数据整合即创造

引言

对比spark来说一下,flink是如何像spark一样将kafka的offset维护到redis中,从而保证数据的一次仅一次消费,做到数据不丢失、不重复,用过spark的同学都知道,spark在读取kafka数据后,DStream(准确是InputDStream[ConsumerRecord[String, String]])中会有这几个信息:topic、partition、offset、key、value、timestamp等等信息,在维护的时候只需要对DStream进行一次foreach操作就可以了,根据场景选择保存offset的位置,再次重启的时候,读取redis中的offset就可以了。
初次使用flink的同学会发现,flink从env.addSource获得到是DataStream[String],里面的内容直接是value,那么该怎么处理?

步骤

  1. 重写FlinkKafkaConsumer010:组建NewKafkaDStream
  2. 存储offset到redis
  3. 读取

代码

import java.nio.charset.StandardCharsets
import java.util._

import com.oneniceapp.bin.KafkaDStream
import my.nexus.util.StringUtils //私仓
import org.apache.flink.api.common.typeinfo.{
   TypeHint, TypeInformation}
import org.apache.flink.streaming.connectors.kafka.internals.KafkaTopicPartition
import org.apache.flink.streaming.connectors.kafka.{
   FlinkKafkaConsumer010, FlinkKafkaConsumerBase}
import org.apache.flink.streaming.connectors.kafka.{
   FlinkKafkaConsumer010, FlinkKafkaConsumerBase, KafkaDeserializationSchema}
import org.apache.flink.streaming.util.serialization.KeyedDeserializationSchema
import org.slf4j.LoggerFactory
import redis.clients.jedis.Jedis

import scala.collection.JavaConversions._

1、创建NewKafkaDStream对象

case class KafkaDStream(topic:String, partition:Int
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值