目录

基础题

1、flink checkpoint 与 savepoint 区别以及使用场景

思考题

2、Kafka 高效读写数据的原理

1.顺序写磁盘

2.分段日志 + 索引文件

3.零拷贝

4. Page Cache

5. 批量发送

6. 数据压缩

智力题

3、岛上有 100 个囚犯,


基础题

1、flink checkpoint 与 savepoint 区别以及使用场景

1.checkpoint的侧重点是“容错”,即Flink作业意外失败并重启之后,能够直接从早先打下的checkpoint恢复运行,且不影响作业逻辑的准确性。而savepoint的侧重点是“维护”,即Flink作业需要在人工干预下手动重启、升级、迁移或A/B测试时,先将状态整体写入可靠存储,维护完毕之后再从savepoint恢复现场。

2.savepoint是“通过checkpoint机制”创建的,所以savepoint本质上是特殊的checkpoint。

3.checkpoint面向Flink Runtime本身,由Flink的各个TaskManager定时触发快照并自动清理,一般不需要用户干预;savepoint面向用户,完全根据用户的需要触发与清理。

4.checkpoint的频率往往比较高(因为需要尽可能保证作业恢复的准确度),所以checkpoint的存储格式非常轻量级,但作为trade-off牺牲了一切可移植(portable)的东西,比如不保证改变并行度和升级的兼容性。savepoint则以二进制形式存储所有状态数据和元数据,执行起来比较慢而且“贵”,但是能够保证portability,如并行度改变或代码升级之后,仍然能正常恢复。

5.checkpoint是支持增量的(通过RocksDB),特别是对于超大状态的作业而言可以降低写入成本。savepoint并不会连续自动触发,所以savepoint没有必要支持增量。

思考题

2、Kafka 高效读写数据的原理

出处链接:https://blog.csdn.net/weixin_45749011/article/details/106633114?utm_source=app&app_version=4.5.4

1.顺序写磁盘

Kafka的producer生产数据,要写入到log文件中,写的过程是一直追加到文件末端,为顺序写。官网有数据表明,同样的磁盘,顺序写能到600M/s,而随机写只有100K/s。这与磁盘的机械机构有关,顺序写之所以快,是因为其省去了大量磁头寻址的

时间。

2.分段日志 + 索引文件

分段日志是通过数据的偏移量进行存储,索引文件是能快速定位所要查询数据的位置

1、Kafka把topic中一个parition大文件分成多个小文件段,通过多个小文件段,就容易定期清除或删除已经消费完文件,减少磁盘占用。

2、通过索引信息可以快速定位message和确定response的最大大小。

3、通过index元数据全部映射到memory,可以避免segment file的IO磁盘操作。

4、通过索引文件稀疏存储,可以大幅降低index文件元数据占用空间大小。

3.零拷贝

如下图所示是普通Java读取复制文件的一个流程

Java程序是无法直接操作硬件的,所以Java想要操作文件的话必须得通过操作系统去读取文件。这时就会涉及大量的读写缓存,因为我们发送数据的时候不可能1kb的发,因此只能先缓存起来,这必定会涉及到大量的IO操作,由此可见这样的效率并不是非常高的。

零拷贝

1.在Kafka中我们的Java程序并不需要文件的内容,所以Kafka就使用了零拷贝的技术,因此Kafka当中的数据直接缓存在操作系统当中,我们读也在这里读 写也在这里写,这样的效率提高了许多。

2.所谓的零拷贝并不是真正意义上的零拷贝 实际上是缓存了一次,只是相对于普通Java读取复制文件少了许多中间的缓存

4. Page Cache

由上图可见

1. 传统的数据传输是先将数据缓存在内存当中,当数据达到一定的阈值再写入到文件中。

2. Page Cache 是在操作系统开了一个内存将数据直接缓存到系统内存中。

3. 虽然将数据缓存到Page Cache中会比直接缓存到Memory中效率更低,但是当数据量达到一定的阈值的时候Memory会对缓存中的数据进行溢写,这样的效率就会比直接写入Page Cache会更低,因为Page Cache对文件进行读写操作效率是非常高的,而Memory对数据进行溢写这时就需要请求操作系统,所以这样的效率会比Page Cache对文件的读写操作效率低很多。

4. 缓存到Memory我们JVM所分配到的内存是有限的,而Page Cache是利用操作系统的内存。

5. 批量发送

kafka允许进行批量发送消息,producer发送消息的时候,可以将消息缓存在本地,等到了固定条件发送到kafka

1. 等消息条数到固定条数

2. 一段时间发送一次

6. 数据压缩

Kafka还支持对消息集合进行压缩,Producer可以通过GZIP或Snappy格式对消息集合进行压缩。

压缩的好处就是减少传输的数据量,减轻对网络传输的压力

批量发送和数据压缩一起使用效果最好,单条做数据压缩的话,效果不明显

智力题

3、岛上有 100 个囚犯,

他们都是蓝眼睛,但是他们都只能看到别人眼睛的颜色, 并不能知道自己的眼睛颜色,而且他们之间不能去谈论眼睛颜色的话题,规定每天晚上都可 以有一个人去找守卫说出自己的眼睛颜色,如果错了被杀死,如果对了被释放。但是大家在 没有十足的把握前都不敢去找守卫,有一天,一个医生对他们说你们之中至少有一个蓝眼睛, 然后 N 天,这些人都获救了,为什么?这句话对他们有什么影响?

如果只有一个蓝眼人,那么他原本看不到蓝眼人,听到医生的话,就知道了医生说的蓝眼人就是自己,因此他在当天晚上找守卫说自己是蓝眼睛。

由此可以推出,如果有两个蓝眼人,那么他们原本都只看到一个蓝眼人,听到医生的话,都会想:对方是不是岛上唯一的蓝眼人?如果是的话,那么一天后他应该发现对方已经被释放。但过了一天没人被释放,因此两人都明白了,对方没被释放是因为岛上还有一个蓝眼人,就是自己。因此,在医生讲话的第二天晚上,这两人会一起被释放。

这是个递归逻辑。各位想想,如果有三个蓝眼睛,那第二天当晚这三个蓝眼睛就同时被释放。

如果是四个蓝眼睛,那第三天当晚这四个蓝眼睛就同时被释放。

依次类推,100个蓝眼睛,第99天当晚全部被释放。

大数据面试--20210611相关推荐

  1. 大数据面试-06-大数据工程师面试题

    3.14 1.一个Hadoop环境,整合了HBase和Hive,是否有必要给HDFS和Hbase都分别配置压缩策略?请给出对压缩策略的建议. hdfs在存储的时候不会将数据进行压缩,如果想进行压缩,我 ...

  2. 大数据面试求职经验总结

    写在前面:空杯心态,多投多改,把握好校招机会,它是你最容易通往大厂的机会. 面试经验分享: 1. 提前了解应聘公司信息,知道该公司是做什么的,发展情况,招聘的岗位的要求等 : 2.面试不要说自己是培训 ...

  3. 精选大数据面试真题10道(附答案详细解析)

    大数据笔面试系列文章分为两种类型:混合型(即一篇文章中会有多个框架的知识点-融会贯通):专项型(一篇文章针对某个框架进行深入解析-专项演练). 此篇文章为系列文章的第一篇(混合型) 第一题:大数据笔试 ...

  4. python人工智能面试题爱奇艺面试题_【爱奇艺Python面试】爱奇艺大数据面试 python-看准网...

    爱奇艺大数据面试 python 通知的今天上午11点爱奇艺一轮面试,今天!周末!周末!周末!竟然还要面试,内心很无语,上个星期人家腾讯还是周一面试呢,但是,想想宿舍的一个小伙伴今天上午9点半的面试,庆 ...

  5. 大数据面试之hive重点(二)

    大数据面试之hive重点(二) Hive SQL转化为MR的过程? 可回答:1)Hive SQL的解析过程:2)Hive SQL的底层实现 问过的一些公司:阿里,头条,小米,滴滴,美团x2,网易,快手 ...

  6. 大数据面试之新浪面试题

    大数据面试之新浪面试题 学长1 一面 1)自我介绍 叫什么名字,来自哪里,本科哪个学校,硕士哪个学校,大数据做了多长时间,对Hadoop生态圈以及Spark生态圈中的哪些技术比较了解(很简单的一句就带 ...

  7. 大数据面试重点之kafka(七)

    大数据面试重点之kafka(七) Kafka的分区器.拦截器.序列化器? 问过的一些公司:ebay 参考答案: Kafka中,先执行拦截器对消息进行相应的定制化操作,然后执行序列化器将消息序列化,最后 ...

  8. 大数据面试3分钟自我介绍_大数据面试要注意哪些方面?大数据面试准备三大攻略...

    大数据面试要注意哪些方面?一般来说,求职者要做好自我介绍.面试提问和专业考题三大方面的准备.下面是小编专门为大数据求职者整理的面试攻略,希望对大家找工作有所帮助. 一.大数据面试的自我介绍. 面试一开 ...

  9. 面试系列一:精选大数据面试真题10道(混合型)-附答案详细解析

    本公众号(五分钟学大数据)将推出大数据面试系列文章-五分钟小面试,此系列文章将会深入研究各大厂笔面试真题,并根据笔面试题扩展相关的知识点,助力大家都能够成功入职大厂! 大数据笔面试系列文章分为两种类型 ...

最新文章

  1. 轻量级数据库Sqlite的使用
  2. django如何调用php接口,使用django集成第三方api开发接口注意事项
  3. Veeam创建复制任务Replication Job
  4. [转载] python关键字和保留字_Python关键字
  5. matlab2016一条命令设置坐标轴标签旋转角度、字体大小和字体!
  6. 报表开发导出各种格式文件的API
  7. 面试官:这货一听就是一个水货...
  8. 38. Linux 备份
  9. 嵌入式Linux的学习路线
  10. 计算机毕业设计php的村镇干部绩效考核系统
  11. 人工智能导论(3)——确定性推理(Certainty Reasoning)
  12. 开机动画适配方案_修改开机动画教程
  13. android 功能页面设计,50个优秀用户体验的手机界面设计(APP UI DESIGN)
  14. 阿里云国际站的对象存储oss与自建存储的区别
  15. MFC怎么封装CreateWindow
  16. android java pbo_Android OpenGL ES 3.0 PBO而不是glReadPixels()
  17. Struts2实现文件下载功能
  18. GPT系列:GPT1 -> 2 -> 3 -> InstructGPT ->ChatGPT
  19. JSON学习笔记-处理空白字符(使用 SSE4.2 优化字符串扫描)
  20. mysql为什么会慢

热门文章

  1. SpringBoot集成MinIo实现资源库功能
  2. 文件下载名称出现乱码问题
  3. 向日葵远程桌面提示连接断开解决方法
  4. mysql5.7安装版较长_MySQL5.7安装版的下载和安装
  5. Cocos Creator AssetBundle 游戏分包方案评估
  6. 基于SpringBoot实现后端压缩文件下载输出到前端
  7. 大厂面试中三次握手延伸出来n连发你受得了?
  8. 【转】Excel中的Vlookup等函数用法
  9. linux回环网卡,Linux回环网卡驱动设计
  10. “由于找不到msvcr100d.dll...”和“由于找不到msvcp100d.dll...”的解决方法与相关知识