实时数仓-问题

文章讨论了FlinkCDC和Maxwell在数据采集中的差异,例如FlinkCDC能获取历史数据且支持检查点,而Maxwell更稳定但不能单独指定表进行全量同步。同时,提到了HBase作为存储系统的优势和不足,以及Flink中状态、检查点、重启策略等概念。文章还涵盖了实时数仓的构建和优化,包括维度表的管理、数据去重策略以及实时数据的时效性。
摘要由CSDN通过智能技术生成

1.为什么维度表名不用Maxwell采集,需要另外用一个flink cdc采集?

因为如果用Maxwell采集,那么来一条数据,无法判断是否是维度表,是否要存储到hbase

如果用flink cdc ,那么可以先读,变成广播流,广播到其它并行度,这样来一条数据,就可以判断出来是维度表的数据,还是事实表的数据了。

2.hbase和MySQL比较

优点:

  1. 可以存很多行数据,因为可以切分为region
  2. 可以存很多列数据,因为可以按照列族切分store,所以每个列族下面不要有太多的列
  3. 可以灵活配置列,每一行的列可以不一样

缺点:

  1. 如果按照其他字段查询,效率低

3.状态、检查点、状态后端区别

  1. 状态
    1. 存储中间数据的变量
  2. 检查点
    1. 备份状态
  3. 状态后端
    1. 设置状态存储到什么位置
    2. 设置检查点存储到什么位置

4.状态和检查点可以保存到的位置

  1. hash
    1. 状态保存到taskmanager内存
    2. 检查点默认保存到jobmanager内存,也可以配置到HDFS
  2. rocksdb
    1. 状态默认存储在TaskManager的本地数据目录里
    2. 检查点保存到磁盘,也可以配置到HDFS

5.键控状态和算子状态的区别

  1. 键控状态是每一个分组一个状态
  2. 算子状态是每一个并行度一个状态

6.Flink CDC的offset保存到什么地方?

flink cdc  offset 保存到检查点

7.Flink CDC和Maxwell的区别

  1. Flink CDC
    1. 可以获取历史数据
    2. 可以按照binlog读取变化的数据
    3. 不能单独指定要从头读取哪个表,而是会用select全部扫描
  2. Maxwell
    1. 可以获取历史数据
    2. 可以按照binlog读取变化的数据
    3. 可以单独指定一个表,用select扫描,就是bootstarp

8.广播流设置几个并行度

1个

9.Flink-设置重启策略

        //这种设置方法的意思是:只有3次重启机会,每隔3秒重启
        //如果7月5号重启2次,10月5号重启1次,那么3次机会用完了,到11月5号再错就不会重启了
        //3秒指的是,重启一次没成功,那么会等3秒再试着重启
//        env.setRestartStrategy(RestartStrategies.fixedDelayRestart(3,3000L));

        //这种设置方法的意思是:每30天有3次重启机会
        //到30天会归零,如果还有1次机会,那么30天之后,会重置成3次机会
        //后面那个3秒是重启间隔
        env.setRestartStrategy(RestartStrategies.failureRateRestart(3, Time.days(30),Time.seconds(3)));

10.设置操作Hadoop的用户

  1. System.setProperty("HADOOP_USER_NAME","atguigu");
  2. 在idea中添加JVM选项
    1. -DHADOOP_USER_NAME=atguigu

11.实时数仓用的是什么模型?

  1. 离线数仓
    1. 星型模型
    2. 不遵守3范式
    3. 可以维度退化
    4. DIM因为是每日全量同步,可以拿到全部数据,并且是最新的
  2. 实时数仓
    1. 雪花模型
    2. 遵守3范式
    3. DIM存储在Hbase,维度表每变化一次,就更新Hbase中的表

12.需要先读取配置流怎么实现?

  1. 通过关闭Maxwell控制主流,等配置流读取完毕,再启动Maxwell
  2. 在open方法中,通过jdbc从MySQL中将配置数据读取出来,存储到map成员变量中

13.Flink的水位线为什么要减1ms

  1. 因为水位线代表,在当前时间之前的所有数据都到齐了
  2. 窗口触发计算
  3. 定时器
  4. 参考:http://t.csdn.cn/TUPqo

 14.Flink的初始的最大时间戳为什么要加1ms

因为如果用long的最小值,迟迟没有数据到来,那么,在200ms后发送水位线的时候,水位线会减去1,那么水位线会变成一个极大值,所以先加1

15.kafka生产者分区分配策略中,可用分区是指什么?

指的是闲置分区,batch没满的,时间到了,sender线程没来得及拉取的

16. kafka生产者分区分配策略,粘性分区策略

kafka粘性分区,是一直往某个分区发数据, 等这个分区的batch满了,或者linger.ms到了,就再随机选择一个可用分区

17.kafka监控中各个参数含义?

  1. lag:是指条数,数据积压了多少条
  2. offset:是指消费者消费到了哪个位置

18. Flink分区、分组、分流的区别

  1. 分区
    1. 不同的并行度
  2. 分组
    1. 按照key分组,keyBy
  3. 分流
    1. 侧输出流,只是在主流上打了个标记,可以通过主流获取侧输出流

19.Flink设置检查点间隔时间,和每多少秒备份一次不冲突吗?

不冲突

两个检查点间隔:第一个检查点结束的时间到第二个检查点开始的时间;

也就是说第一个检查点备份完成,必须等间隔时间过去,再开始第二次备份

每多少秒(5)备份一次,是指每5秒备份一次检查点,如果5秒到了,还没备份完,以间隔时间为准。

20.Flink设置uid的目的?

uid为了检查点恢复的时候可以找到算子

21.侧流需要加花括号,防止泛型擦除

22.状态是单例的

23.只能在open方法初始化状态

因为在外面初始化,算子的生命周期还没开始,没有上下文

24.FlinkSQL的状态过期可以续命

因为可以设置,读的时候也可以续命

                      左表                      右表
*      内连接         onCreateAndWrite         onCreateAndWrite
*      左外联结       onReadAndWrite           onCreateAndWrite
*      右外联结       onCreateAndWrite         onReadAndWrite
*      全外联结       onReadAndWrite           onReadAndWrite

25. 对于join,不同窗口的情况对比

  1. 滚动窗口
    1. 缺点:容易关联不上
  2. 滑动窗口
    1. 容易重复关联
  3. 会话窗口
    1. 缺点:容易关联不上

26.intervaljoin的特点

  1. 有上下界,范围join,双向,从状态中找时间范围的
  2. 只支持事件时间
  3. 左表是3-8,右表是-3到-8,左流和右流的时间范围不一样,加了个负号(源码)

27.slot是一个进程吗?

答:taskmanager是一个进程,slot不是一个进程。

slot是内存隔离,CPU共享,每个并行度的最大的事件时间都不一样是因为:每个并行度都会创建一个对象,放到taskmanager的堆内存中,每个并行度持有不同的对象引用。

28.flink sql优化

设置状态过期时间

29.Flink API只支持内连接

30.连接器和source的区别

在API中叫source,在SQL中叫连接器

31.关联hbase时,用处理时间的原因

希望获取hbase的最新版本数据

FOR SYSTEM_TIME AS OF e.proc_time d

32.对于内连接,外连接,状态默认是永远不会删除,所以要设置状态的过期时间

33.intervaljoin的状态删除策略

永远不可能再来我的范围内的数据了,所以可以把我从状态中删除。因为源码是把右表的上下界反转了,所以左表会找左边5秒的数据,右表的当前数据也不在左表的范围内,所以可以把右表的当前数据从状态中删除。

当到达上界的时候,会把对应的数据删除。

34.使用intervaljoin时,需要在创建表的时候指定水位线是哪个字段

35.实时数仓为什么要划分域?

有域让数仓更加清晰

36.rocksdb的备份策略

状态默认是在自己的库中

检查点备份在指定Linux目录中

37.sink需要设置读已提交吗?

不用

只需要kafkasource指定就行,为了防止读到脏数据,sink不用指定

38.flink会自己维护kafka的offset

不会触发kafka的再平衡

是kafkasource的一个成员变量,会保存到状态中

39.怎么解决kafka数据重复问题?

可以用抵消的思想。

比如先来了一条左表有值,右表为null的数据,直接传递到下游,并且存到状态中,设置过期时间为10秒,再来一条右表有值的数据,那么会先发送一条-500的数据到下游,抵消原来的值,再把右表有值的数据发送到下游。

如果落不到一个窗口怎么办?

可以设置乱序时间,比如13秒的数据来的时候触发计算,那么前一个窗口触发计算,13秒的数据会落到下一个窗口,所以临界值也没问题。

40. 你们实时数仓都有哪些亮点?

  1. DIM
    1. 存储到hbase
    2. 使用配置表动态创建hbase表
    3. 动态判断数据是否是维度数据
  2. DWD
    1. 动态分流,使用MySQL中的配置表,将简单的事实数据,直接存储到对应的dwd表中
  3. DWS
    1. 维度关联,使用了旁路缓存,异步编排
    2. 对DWD的数据进行去重,采用抵消的思想

41. 你们实时数仓的时效性是多少?

时效性10秒

因为窗口10秒聚合一次,sugar 10秒刷新一次,调用一次接口

42.Maxwell和flink cdc区别

  1. 稳定性
    1. Maxwell更加稳定,因为flink cdc是刚出来的技术
  2. 灵活性
    1. Maxwell可以指定表进行全量同步,flink cdc无法指定,只能一次同步所有表
  3. 架构不同
    1. flink cdc必须基于flink,Maxwell可以写到kafka中

43.taskmanager默认几个slot?

默认1个slot

44.并行度和slot的关系?

每个并行度对应一个slot,如果并行度设置超过了slot数量,会报错。

slot和CPU核的分配原则是,一个CPU分配1个或者2个slot

slot是内存隔离,CPU不隔离

给taskmanager分配4G内存,启动4个slot,每个slot分配1G内存,给jobmanager分配2G

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值