知乎数据工程师面经
接口和抽象类的区别?
接口是一种完全抽象的类,它只定义了方法的签名,而不提供方法的实现。一个类可以实现多个接口。
抽象类是一个类,它可以包含抽象方法(没有实现的方法)和已经实现的方法。一个类只能继承一个抽象类。
final关键字是什么?
final关键字可以应用于类、方法和变量。当应用于类时,表示该类不可被继承。当应用于方法时,表示该方法不可被子类重写。当应用于变量时,表示该变量是一个常量,只能被赋值一次,之后不可修改。
Flink checkpoint 是什么?
Flink checkpoint 是一种分布式快照机制,用于确保流处理应用程序的容错性。它定期保存应用程序的状态信息,包括数据流的位置和状态信息。在发生故障时,Flink 可以使用 checkpoint 来恢复应用程序的状态,从故障前的状态继续处理数据。
checkpoint 中 barrier 的两种对齐方式是什么?
Checkpoint Barrier 是一种特殊的数据标记,在 Flink 中用于表示在该点之前的数据已经被成功处理并保存到 checkpoint 中。两种对齐方式分别是 "Exactly-once" 和 "At-least-once"。
"Exactly-once" 对齐要求所有任务都在处理完 checkpoint barrier 后才能继续处理数据,以确保精确一次处理语义。
"At-least-once" 对齐允许任务在接收到 checkpoint barrier 后立即继续处理数据,但需要确保在 checkpoint 完成前的数据不会再次处理。
简要介绍 Flink 里的 Interval Join
Interval Join 是一种流处理操作,用于在两个数据流之间进行关联,但不是基于相同的事件时间戳来进行匹配,而是基于时间间隔。它允许你在一个事件发生后的一段时间内匹配另一个事件,对于处理事件的持续性窗口或实时事件的关联非常有用。
Flink 窗口函数 Sliding Time Window 为什么不设置很长的窗口时间?
Sliding Time Window 允许窗口的时间范围部分重叠,以捕获连续的数据。如果设置窗口时间太长,可能会导致窗口内的数据量过大,增加处理的复杂性和资源消耗。适当设置窗口时间可以平衡延迟和数据处理效率之间的权衡,确保及时处理数据并降低延迟。
Flink checkpoint 和 Kafka offset 的关联是什么?
Checkpoint 用于记录 Flink 应用程序的状态,而 Kafka offset 用于记录消费 Kafka 主题的位置。通常,Flink 的 Kafka 消费者会与 checkpoint 结合使用,以确保在故障恢复后不会重复处理 Kafka 中的消息。Flink 框架提供了 Kafka 消费者的集成,自动管理 Kafka offset 的提交,不需要手动编写 offset 提交逻辑。
简要介绍 Flink 状态后端的作用。
状态后端是 Flink 用于管理和存储应用程序状态的组件。它负责将应用程序的键控状态(Keyed State)和操作符状态(Operator State)持久化到后端存储系统中,以便在故障恢复时恢复状态。
Flink 里通常使用哪种状态后端,优势分别是什么?
通常选择状态后端取决于应用程序的需求。常见的状态后端包括 MemoryStateBackend、RocksDBStateBackend 和 FileStateBackend。
MemoryStateBackend 适用于开发和调试,但不适合生产环境,因为不具备持久性。
RocksDBStateBackend 适用于生产环境,具有高性能和持久性,可处理大规模状态数据。
FileStateBackend 类似于 RocksDB,但状态存储在文件系统中。选择状态后端时需要考虑性能、持久性和资源需求。
Flink MemoryStateBackend 一定不能用吗?缺点是什么
MemoryStateBackend 不适合生产环境,因为它将所有状态存储在内存中,具有以下缺点:
不具备持久性,即如果应用程序失败或需要重启,所有状态数据将丢失。
内存有限,无法处理大规模的状态数据。不适合长时间运行的应用程序。
#面经#解决职场真实面试问题,分享同学真实成功案例,欢迎订阅关注!