flink实时消费kafka topic数据处理

1:代码demo

//PROPS为kafka的配置文件
		int parallelism =3;
   /*1:flink运行环境初始化*/
        StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
        env.setParallelism(parallelism);
        FlinkKafkaConsumer<String> stringFlinkKafkaConsumer = new FlinkKafkaConsumer<>(topic, new CustomKafkaDeserializationSchema(), PROPS);

  		SingleOutputStreamOperator<String> sourceStream = env.addSource(consumer).disableChaining().name("输入数据");
 //已经读取到数据了,开始数据处理
  SingleOutputStreamOperator<String> jsonObjOne = sourceStream.map((MapFunction<String, String>) s -> {
            return s;
        })

   try {
            env.execute(ck);
        } catch (Exception e) {
            throw new RuntimeException(e);
        }

PROPS配置信息,主要配置如下,放在properties配置文件中进行读取即可。

#建立与kafka集群连接的host/port组
bootstrap.servers=**
#用来唯一标识consumer进程所在组的字符串,如果设置同样的group id,表示这些processes都是属于同一个consumer group
group.id=1
#键的序列化方式
key.deserializer=org.apache.kafka.common.serialization.StringDeserializer
#值的序列化方式
value.deserializer=org.apache.kafka.common.serialization.ByteArrayDeserializer
#偏移量的方式
auto.offset.reset=earliest

CustomKafkaDeserializationSchema 对数据进行解析。

@Slf4j
public class CustomKafkaDeserializationSchema implements KafkaDeserializationSchema<String> {

    private int count = 0;

    @Override
    public boolean isEndOfStream(String s) {
        return false;
    }

    @Override
    public String deserialize(ConsumerRecord<byte[], byte[]> consumerRecord) {
    //可以对读取到的数据进行序列化处理,比如增减字段等公共功能
        String topic = consumerRecord.topic();
        String value = new String(consumerRecord.value(), StandardCharsets.UTF_8);
        long offset = consumerRecord.offset();
        int partition = consumerRecord.partition();
        JSONObject jsonObject = JSONObject.parseObject(value);
        jsonObject.put("offset", offset);
        jsonObject.put("partition", partition);
       //其他处理也可以
        return JSONObject.toJSONString(jsonObject);
    }

    @Override
    public TypeInformation<String> getProducedType() {
        return TypeInformation.of(String.class);
    }
}
Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐