flink消费kafka设置(记录)

最近遇到个问题,flink消费kafka直接用kafka设置却无法从最新的开始消费

auto.offset.reset=latest

后面直接通过

FlinkKafkaConsumer.setStartFromTimestamp(1624896000000L)

实现从指定位置消费

  1. setStartFromGroupOffsets,也是默认的策略,从 group offset 位置读取数据,group offset 指的是 kafka broker 端记录的某个 group 的最后一次的消费位置。但是 kafka broker 端没有该 group 信息,会根据 kafka 的参数 "auto.offset.reset" 的设置来决定从哪个位置开始消费。
  2. setStartFromEarliest,从 kafka 最早的位置开始读取。
  3. setStartFromLatest,从 kafka 最新的位置开始读取。
  4. setStartFromTimestamp(long),从时间戳大于或等于指定时间戳的位置开始读取。Kafka 时戳,是指 kafka 为每条消息增加另一个时戳。该时戳可以表示消息在 proudcer 端生成时的时间、或进入到 kafka broker 时的时间。
  5. setStartFromSpecificOffsets,从指定分区的 offset 位置开始读取,如指定的 offsets 中不存某个分区,该分区从 group offset 位置开始读取。此时需要用户给定一个具体的分区、offset 的集合。
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,下面是一个简单的 Flink 设置 Kafka Offset 的示例代码: ```java import org.apache.flink.api.common.functions.FlatMapFunction; import org.apache.flink.api.common.serialization.SimpleStringSchema; import org.apache.flink.api.java.utils.ParameterTool; import org.apache.flink.streaming.api.CheckpointingMode; import org.apache.flink.streaming.api.datastream.DataStream; import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment; import org.apache.flink.streaming.api.functions.source.SourceFunction; import org.apache.flink.streaming.connectors.kafka.FlinkKafkaConsumer; import org.apache.flink.streaming.connectors.kafka.FlinkKafkaConsumer010; import org.apache.flink.streaming.connectors.kafka.FlinkKafkaConsumer09; import org.apache.flink.streaming.connectors.kafka.KafkaDeserializationSchema; import org.apache.flink.streaming.connectors.kafka.KafkaSerializationSchema; import org.apache.flink.streaming.connectors.kafka.KafkaSink; import org.apache.flink.streaming.connectors.kafka.config.StartupMode; import org.apache.flink.streaming.util.serialization.JSONKeyValueDeserializationSchema; import org.apache.flink.streaming.util.serialization.KeyedSerializationSchema; import org.apache.flink.util.Collector; import org.apache.kafka.clients.consumer.ConsumerConfig; import org.apache.kafka.clients.producer.ProducerConfig; import org.apache.kafka.common.serialization.StringDeserializer; import org.apache.kafka.common.serialization.StringSerializer; import java.util.Properties; public class FlinkKafkaOffsetDemo { public static void main(String[] args) throws Exception { // 从参数中读取 Kafka topic 和其他参数 final ParameterTool parameterTool = ParameterTool.fromArgs(args); String topic = parameterTool.get("topic"); String brokers = parameterTool.get("brokers"); String groupId = parameterTool.get("group-id"); String offsetReset = parameterTool.get("offset-reset", "latest"); // 设置 Flink 的执行环境 final StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment(); env.enableCheckpointing(5000L, CheckpointingMode.EXACTLY_ONCE); // 设置 Kafka Consumer 的配置 Properties kafkaProps = new Properties(); kafkaProps.setProperty(ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG, brokers); kafkaProps.setProperty(ConsumerConfig.GROUP_ID_CONFIG, groupId); kafkaProps.setProperty(ConsumerConfig.KEY_DESERIALIZER_CLASS_CONFIG, StringDeserializer.class.getName()); kafkaProps.setProperty(ConsumerConfig.VALUE_DESERIALIZER_CLASS_CONFIG, StringDeserializer.class.getName()); kafkaProps.setProperty(ConsumerConfig.AUTO_OFFSET_RESET_CONFIG, offsetReset); // 从 Kafka 中读取数据 FlinkKafkaConsumer<String> kafkaConsumer = new FlinkKafkaConsumer<>(topic, new SimpleStringSchema(), kafkaProps); kafkaConsumer.setStartFromEarliest(); DataStream<String> input = env.addSource(kafkaConsumer); // 对数据进行处理 DataStream<String> result = input.flatMap(new FlatMapFunction<String, String>() { @Override public void flatMap(String value, Collector<String> out) throws Exception { out.collect(value); } }); // 将数据写入 Kafka Properties producerProps = new Properties(); producerProps.setProperty(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, brokers); producerProps.setProperty(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, StringSerializer.class.getName()); producerProps.setProperty(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG, StringSerializer.class.getName()); KafkaSerializationSchema<String> kafkaSerializationSchema = new KeyedSerializationSchema<String>() { @Override public byte[] serializeKey(String element) { return null; } @Override public byte[] serializeValue(String element) { return element.getBytes(); } @Override public String getTargetTopic(String element) { return topic; } }; KafkaSink<String> kafkaSink = new KafkaSink<>(producerProps, kafkaSerializationSchema); result.addSink(kafkaSink); // 执行 Flink Job env.execute("Flink Kafka Offset Demo"); } } ``` 在上面的示例中,我们使用 FlinkKafkaConsumer 设置Kafka Consumer 的配置,并从 Kafka 中读取了数据。在从 Kafka 中读取数据的过程中,我们可以通过设置 `setStartFromEarliest()` 或 `setStartFromLatest()` 方法来设置从什么位置开始读取数据。 读取到的数据会经过我们自定义的 `flatMap()` 函数进行处理,然后再将处理后的数据写入 Kafka 中。在写入数据时,我们使用了 KafkaSink,并设置Kafka Producer 的配置和序列化方式。 在实际使用时,我们可以根据具体的业务场景来设置 Kafka Consumer 的 offset,以实现更加灵活的数据处理。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值