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

需求背景:

  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();
            
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: flink 实时计算是一种流式计算框架,可以用于实时处理大规模数据。词频统计flink 实时计算的一个常见应用场景,可以用于统计文本中每个单词出现的频率。初体验可以通过编写简单的代码实现,对 flink 实时计算有一个初步的了解。 ### 回答2: Flink 是一种流数据处理框架,可以进行实时计算和批处理,适用于对实时数据进行分析和处理的场景。其中,词频统计是一个常用的实时应用场景,可以用于分析用户搜索的热门关键词、监控社交媒体的流行话题等等。 使用 Flink 进行词频统计的过程如下: 1. 从数据源中读取数据:可以使用 Flink 提供的多种数据源,例如 Kafka、HDFS、本地文件等等; 2. 进行数据清洗:对数据进行过滤、去重等操作,保证数据的准确性和完整性; 3. 进行分词:将读取到的文本数据进行分词,可以使用开源的中文分词工具,例如 HanLP、jieba 等等; 4. 进行词频统计:通过对每个词语进行计数,得到每个词语的出现次数; 5. 输出结果:将词频统计的结果输出到指定的数据源上,例如 Kafka、HDFS等等。 在实际应用中,基于 Flink 的词频统计可以应用于多种场景。例如在电商网站中,词频统计可以用于分析用户搜索热度,从而为商家提供商品推荐,优化营销策略。又例如在闻媒体中,词频统计可以用于监控事件热点,分析社交媒体上的流行话题,帮助闻工作者快速捕捉社会热点。 总之,通过 Flink 实现实时的词频统计,可以帮助企业和个人快速获取实时数据,优化决策和服务。对于初学者来说,可以从简单的单词计数入手,逐步深入理解流计算和分布式计算的基本概念,提高数据处理的效率和准确性。 ### 回答3: Flink 是现代流式处理引擎,广泛用于实时计算场景。它通过高速数据流的处理能力,使得实时计算成为了可能。在 Flink 中,词频统计是一个非常重要的实时计算应用场景,其主要用途是统计某个文本中每个单词出现的频次,从而揭示文本的特点和蕴含的信息。 词频统计初体验中,我们需要先确定数据的输入源,这可以是数据流(Stream)或数据集(DataSet)。对于流式输入源,我们需要使用 Flink 的 DataStream API,而对于有界的离线输入源,我们需要使用 Flink 的 Batch API。 在进一步设计统计模型之前,我们需要对数据进行预处理,以清理噪声和冗余信息,并将其转换为可用于分析的形式。Flink 提供了许多数据预处理操作,我们可以将其组合使用,例如 map()、filter()、flatmap() 和 reduce() 等等。这些操作可以将数据流转换为指定格式的数据集,以方便数据分析。对于文本数据,我们通常需要将其转换为单词流,以便进行词频统计。 在 Flink 中,我们可以使用 Window 操作将数据流分成可管理的时间窗口,以便对其进行分析。常见的窗口类型有滚动窗口、滑动窗口、会话窗口等等。在词频统计场景中,我们可以使用 Tumbling Window 将数据流划分为固定大小的窗口,然后对每个窗口中的所有单词进行计数。 在得到了每个窗口内所有单词的计数值后,我们可以再进一步使用 reduce() 操作进行累计计算,得到每个单词的总出现次数。这些数据可以存储到外部系统中,如数据库或文件系统中,以方便后续分析或展示。 总之,通过实践词频统计场景,我们可以深入理解 Flink 流式处理引擎的设计理念和使用方法。同时,我们也能够更好地掌握实时数据流处理的实践中常见的数据处理和分析方法。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值