Flink KafkaSource常用调优

Flink KafkaSource常用调优

1、Kafka动态分区发现
该参数表示间隔多久检测一次是否有新创建的 partition。默认值是Long的最小值,表示不开启,大于0表示开启。

properties.setProperty(FlinkKafkaConsumerBase.KEY_PARTITION_DISCOVERY_INTERVAL_MILLIS, "30000"); 	//	30s

2、可选,从Kafka数据处生产WaterMark
3、设置WaterMark空闲等待时间

主要用来处理,多分区间数据无序的情况。
由于下游算子 watermark 的计算方式是取所有不同的上游并行数据源 watermark 的最小值,则其 watermark 将不会发生变化,导致窗口、定时器等不会被触发。

StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();

Properties properties = new Properties();
properties.setProperty(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG,"aaaa:9092,bbbb:9092,cccc:9092");
properties.setProperty(ConsumerConfig.GROUP_ID_CONFIG,"dddd");


FlinkKafkaConsumer<String> kafkaSourceFunction = new FlinkKafkaConsumer<>(
                "flinktest",
                new SimpleStringSchema(),
                properties
        );

//	KafkaSource可以直接生成WaterMark,可以不用指定时间字段,会自动解析ts
kafkaSourceFunction.assignTimestampsAndWatermarks(
                WatermarkStrategy
                        .<String>forBoundedOutOfOrderness(Duration.ofMinutes(2))
                        //	空闲等候时间  30 分钟
						.withIdleness(Duration.ofMinutes(30))
);

env.addSource(kafkaSourceFunction)

4、Kafka的offset消费策略
注意:该消费策略不同于 auto.offset.reset 的值
FlinkKafkaConsumer可以调用以下5个API

setStartFromGroupOffsets():默认消费策略,默认读取上次保存的offset信息,如果是应用第一次启动,读取不到上次的offset信息,则会根据这个参数auto.offset.reset的值来进行消费数据。
setStartFromEarliest():从最早的数据开始进行消费,忽略存储的offset信息。强制的
setStartFromLatest():从最新的数据进行消费,忽略存储的offset信息。强制的
setStartFromSpecificOffsets(Map):从指定位置进行消费
setStartFromTimestamp(long):从topic中指定的时间点开始消费,指定时间点之前的数据忽略

注意:当checkpoint机制开启的时候,Flink会从最近一次的checkpoint中进行恢复数据,(也就是说,上面几种策略,只有第一次启动的时候起作用)

你可能感兴趣的:(flink,大数据)