flink实时消费kafka topic数据处理

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);
    }
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
如果Flink消费Kafka数据,可能有以下几个原因: 1. 检查Kafka集群的连接配置是否正确。确保在PROPS配置文件中正确设置了bootstrap.servers参数,指定了正确的Kafka集群的host和port。 2. 检查消费者所属的消费者组ID是否正确。在PROPS配置文件中,确保group.id参数设置为正确的消费者组ID。 3. 检查消费者的键和值的序列化方式是否正确。在PROPS配置文件中,确保key.deserializer和value.deserializer参数设置为正确的序列化方式。 4. 检查消费者的偏移量设置是否正确。在PROPS配置文件中,确保auto.offset.reset参数设置为正确的偏移量方式,比如earliest表示从最早的偏移量开始消费。 5. 检查Flink代码中的配置是否正确。确保在Flink代码中正确设置了Kafka消费者和反序列化器。 如果以上步骤都检查过了,仍然无法消费Kafka数据,可以尝试查看Flink的日志文件,查找可能的错误信息。另外,还可以检查Kafka集群的状态,确保Kafka集群正常运行并且有可用的数据。 #### 引用[.reference_title] - *1* *2* *3* [flink实时消费kafka topic数据处理](https://blog.csdn.net/weixin_43930865/article/details/126626876)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值