2021-08-23 17:05:17 +08:00
|
|
|
|
package com.zdjizhi.utils.kafka;
|
|
|
|
|
|
|
|
|
|
|
|
import com.zdjizhi.common.FlowWriteConfig;
|
|
|
|
|
|
import org.apache.flink.api.common.serialization.SimpleStringSchema;
|
2022-03-22 11:46:34 +08:00
|
|
|
|
import org.apache.flink.api.common.serialization.TypeInformationSerializationSchema;
|
|
|
|
|
|
import org.apache.flink.api.common.typeinfo.BasicTypeInfo;
|
|
|
|
|
|
import org.apache.flink.api.common.typeutils.base.StringSerializer;
|
2022-03-08 15:18:28 +08:00
|
|
|
|
import org.apache.flink.connector.kafka.source.KafkaSource;
|
|
|
|
|
|
import org.apache.flink.connector.kafka.source.enumerator.initializer.OffsetsInitializer;
|
2022-03-22 11:46:34 +08:00
|
|
|
|
import org.apache.flink.connector.kafka.source.reader.deserializer.KafkaRecordDeserializationSchema;
|
2021-08-23 17:05:17 +08:00
|
|
|
|
import org.apache.flink.streaming.connectors.kafka.FlinkKafkaConsumer;
|
2022-03-08 15:18:28 +08:00
|
|
|
|
import org.apache.flink.streaming.connectors.kafka.FlinkKafkaConsumerBase;
|
2021-08-23 17:05:17 +08:00
|
|
|
|
|
|
|
|
|
|
|
2022-03-08 15:18:28 +08:00
|
|
|
|
import java.util.Map;
|
2021-08-23 17:05:17 +08:00
|
|
|
|
import java.util.Properties;
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* @author qidaijie
|
|
|
|
|
|
* @Package com.zdjizhi.utils.kafka
|
|
|
|
|
|
* @Description:
|
|
|
|
|
|
* @date 2021/6/813:54
|
|
|
|
|
|
*/
|
2022-03-08 15:18:28 +08:00
|
|
|
|
public class KafkaConsumer {
|
2021-08-23 17:05:17 +08:00
|
|
|
|
private static Properties createConsumerConfig() {
|
|
|
|
|
|
Properties properties = new Properties();
|
2021-11-07 17:13:13 +03:00
|
|
|
|
properties.put("bootstrap.servers", FlowWriteConfig.SOURCE_KAFKA_SERVERS);
|
2021-08-23 17:05:17 +08:00
|
|
|
|
properties.put("group.id", FlowWriteConfig.GROUP_ID);
|
2021-11-07 17:13:13 +03:00
|
|
|
|
properties.put("session.timeout.ms", FlowWriteConfig.SESSION_TIMEOUT_MS);
|
|
|
|
|
|
properties.put("max.poll.records", FlowWriteConfig.MAX_POLL_RECORDS);
|
|
|
|
|
|
properties.put("max.partition.fetch.bytes", FlowWriteConfig.MAX_PARTITION_FETCH_BYTES);
|
2022-03-22 11:46:34 +08:00
|
|
|
|
properties.put("partition.discovery.interval.ms", "10000");
|
2022-03-08 15:18:28 +08:00
|
|
|
|
CertUtils.chooseCert(FlowWriteConfig.SOURCE_KAFKA_SERVERS, properties);
|
2021-09-27 11:11:56 +08:00
|
|
|
|
|
2021-08-23 17:05:17 +08:00
|
|
|
|
return properties;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2022-03-08 15:18:28 +08:00
|
|
|
|
/**
|
|
|
|
|
|
* 用户序列化kafka数据,增加 kafka Timestamp内容。
|
|
|
|
|
|
*
|
|
|
|
|
|
* @return kafka logs -> map
|
|
|
|
|
|
*/
|
|
|
|
|
|
public static FlinkKafkaConsumer<Map<String, Object>> myDeserializationConsumer() {
|
|
|
|
|
|
FlinkKafkaConsumer<Map<String, Object>> kafkaConsumer = new FlinkKafkaConsumer<>(FlowWriteConfig.SOURCE_KAFKA_TOPIC,
|
|
|
|
|
|
new TimestampDeserializationSchema(), createConsumerConfig());
|
|
|
|
|
|
|
2022-03-22 11:46:34 +08:00
|
|
|
|
//随着checkpoint提交,将offset提交到kafka
|
|
|
|
|
|
kafkaConsumer.setCommitOffsetsOnCheckpoints(true);
|
|
|
|
|
|
|
|
|
|
|
|
//从消费组当前的offset开始消费
|
2022-03-08 15:18:28 +08:00
|
|
|
|
kafkaConsumer.setStartFromGroupOffsets();
|
|
|
|
|
|
|
|
|
|
|
|
return kafkaConsumer;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* 官方序列化kafka数据
|
|
|
|
|
|
*
|
|
|
|
|
|
* @return kafka logs
|
|
|
|
|
|
*/
|
|
|
|
|
|
public static FlinkKafkaConsumer<String> flinkConsumer() {
|
2021-11-07 17:13:13 +03:00
|
|
|
|
FlinkKafkaConsumer<String> kafkaConsumer = new FlinkKafkaConsumer<>(FlowWriteConfig.SOURCE_KAFKA_TOPIC,
|
2021-08-23 17:05:17 +08:00
|
|
|
|
new SimpleStringSchema(), createConsumerConfig());
|
|
|
|
|
|
|
2022-03-22 11:46:34 +08:00
|
|
|
|
kafkaConsumer.setCommitOffsetsOnCheckpoints(true);
|
2021-08-23 17:05:17 +08:00
|
|
|
|
kafkaConsumer.setStartFromGroupOffsets();
|
|
|
|
|
|
|
|
|
|
|
|
return kafkaConsumer;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|