Flink 广播变量实战-实时统计新用户行为

本文介绍了使用Flink广播变量来实现实时统计新用户行为的需求,通过Canal将MySQL binlog转为Kafka流数据。在BroadcastProcessFunction中处理逻辑,强调了广播变量只读及防止状态无限膨胀的策略,提出延迟数据流处理以解决启动乱序问题,确保广播流的历史规则加载完成后再处理数据流。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

需求背景:

  1.所有用户行为存放在kafka  中。

  2.用户数据存储在Mysql中,当新用户到来时,Mysql会新增一条记录。

要求:只统计新用户的实时行为数据,并写入下游kafka。

 

实现方案:

参考官方文档:

在此示例中,第一个流将包含Item带有ColorShape属性的type元素。另一个流将包含Rules

可以看到官方给的例子中,item流类似我们的用户行为,rules流类似于我们的mysql用户表。我们将他们分别称为数据流和广播流。

在这里,我们利用Canal将mysql的binlog数据转换为kafka的流数据。这样,我们就得到了广播流。

SingleOutputStreamOperator<Tuple6<String,String,String,String,String,Long>> mysqlSource =  env.addSource(mysqlConsumer).setParallelism(1)
                .name("mysql").uid("mysql").flatMap(new FlatMapFunction<JsonNode, Tuple6<String,String,String,String,String,Long>>() {
                    SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
                    @Override
                    public void flatMap(JsonNode value, Collector<Tuple6<String,String,String,String,String,Long>> out) throws Exception {
                        JsonNode v = value.get("value");
                        if("INSERT".equals(v.get("type").asText())){
                            //只处理Type是INSERT的情况
                            Tuple6<String,String,String,String,String,Long> res = new Tuple6<String,String,String,String,String,Long>();
                            res.f0=v.get("data").get(0).get("uid").asText();
                            res.f1=v.get("table").asText();
                            res.f2=v.get("data").get(0).get("name").asText();
                            res.f3=v.get("data").get(0).get("time").asText().substring(0,13)+":00:00";
                            res.f4=v.get("data").get(0).get("c_id").asText();
                            res.f5=simpleDateFormat.parse(v.g
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值