Flink Kafka-Connector Consumer详解

Kafka Consumer消费策略

1、setStartFromGroupOffsets()【默认消费策略】

默认读取上次保存的offset信息,如果是应用第一次启动,读取不到上次的offset信息,则会根据这个参数auto.offset.reset的值来进行消费数据

2、setStartFromEarliest()

从最早的数据开始进行消费,忽略存储的offset信息

3、setStartFromLatest()

从最新的数据进行消费,忽略存储的offset信息

4、setStartFromSpecificOffsets(Map<KafkaTopicPartition, Long>)

手工指定开始消费的offset

Kafka Consumer的容错

1、当checkpoint机制开启的时候,Kafka Consumer会定期把kafkaoffset信息还有其他operator的状态信息一块保存起来。当job失败重启的时候,Flink会从最近一次的checkpoint中进行恢复数据,重新消费kafka中的数据。

2、为了能够使用支持容错的kafka Consumer,需要开启checkpoint

 env.enableCheckpointing(5000); // 每5s checkpoint一次

动态加载Topic方式

final StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();

Properties properties = new Properties();
properties.setProperty("bootstrap.servers", "localhost:9092");
properties.setProperty("group.id", "test");

FlinkKafkaConsumer011<String> myConsumer = new FlinkKafkaConsumer011<>(
    java.util.regex.Pattern.compile("test-topic-[0-9]"),
    new SimpleStringSchema(),
    properties);

DataStream<String> stream = env.addSource(myConsumer);
...

Kafka Consumers Offset 自动提交

针对job是否开启checkpoint来区分

1、Checkpoint关闭时: 可以通过下面两个参数配置

•enable.auto.commit

•auto.commit.interval.ms

2、Checkpoint开启时:当执行checkpoint的时候才会保存offset,这样保证了kafka的offset和checkpoint的状态偏移量保持一致。

可以通过这个参数设置setCommitOffsetsOnCheckpoints(boolean)。这个参数默认就是true。表示在checkpoint的时候提交offset,此时,kafka中的自动提交机制就会被忽略

使用demo

import java.util.Properties
import org.apache.flink.api.common.serialization.SimpleStringSchema
import org.apache.flink.streaming.api.scala.StreamExecutionEnvironment
import org.apache.flink.streaming.connectors.kafka.FlinkKafkaConsumer011
import org.apache.flink.streaming.api.CheckpointingMode
import org.apache.flink.streaming.api.environment.CheckpointConfig

object StreamingKafkaSourceScala {
  def main(args: Array[String]): Unit = {
    val env = StreamExecutionEnvironment.getExecutionEnvironment
    //隐式转换
    import org.apache.flink.api.scala._
    //checkpoint配置
    env.enableCheckpointing(5000)
    env.getCheckpointConfig.setCheckpointingMode(CheckpointingMode.EXACTLY_ONCE)
    env.getCheckpointConfig.setMinPauseBetweenCheckpoints(500)
    env.getCheckpointConfig.setCheckpointTimeout(60000)
    env.getCheckpointConfig.setMaxConcurrentCheckpoints(1)
    env.getCheckpointConfig.enableExternalizedCheckpoints(CheckpointConfig.ExternalizedCheckpointCleanup.RETAIN_ON_CANCELLATION)

    val topic = "test"
    val prop = new Properties()
    prop.setProperty("bootstrap.servers","192.168.24.141:9092")
    prop.setProperty("group.id","test-consumer-group")
    val myConsumer = new FlinkKafkaConsumer011[String](topic, new SimpleStringSchema(),prop)
    val text = env.addSource(myConsumer)
    text.print()
    env.execute("StreamingKafkaSourceScala")
  }
}

 

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值