Flink Kafka-Connector Consumer详解

本文详细介绍了KafkaConsumer的四种消费策略,包括默认消费策略、从最早数据开始消费、从最新数据消费及手工指定消费offset。同时,探讨了KafkaConsumer的容错机制,如何通过checkpoint保存offset信息,确保数据消费的准确性和一致性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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")
  }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值