flink和kafka常见面试题

1. Kafka 为什么吞吐量这么高?

Kafka 之所以吞吐量高,主要依赖以下几个设计:

首先,Kafka 采用顺序写磁盘,消息以追加方式写入 Log 文件,避免随机 I/O 带来的性能损耗,使磁盘写入效率非常高。

其次,Kafka 使用零拷贝(Zero Copy)技术,减少数据在用户态和内核态之间的复制,降低 CPU 消耗,提高网络传输效率。

同时,Kafka 支持批量发送和批量消费,将多条消息合并处理,减少网络请求和磁盘 I/O 次数,提高整体吞吐。

另外,Kafka 通过 Partition 分区机制实现水平扩展,不同 Partition 可以并行读写,充分利用多台机器和多核 CPU 的能力。

最后,Kafka 依赖操作系统 Page Cache 缓存热点数据,减少磁盘访问,提高读写性能。

总结来说,Kafka 高吞吐主要依靠:顺序写磁盘 + 零拷贝 + 批量处理 + 分区并行 + Page Cache 优化。这些设计让 Kafka 能够支撑百万级消息吞吐。

2、Kafka 为什么需要 Partition?

首先,Partition 可以实现并行处理。一个 Topic 可以拆分成多个 Partition,不同 Partition 可以分布在不同 Broker 上,由多个 Producer 和 Consumer 并行读写,从而提高系统整体吞吐量。

其次,Partition 提供了水平扩展能力。当数据量增加时,可以通过增加 Partition 数量和 Broker 节点来扩容,而不需要单机承担全部数据压力。

另外,Partition 通过 Offset 保证消息顺序。Kafka 只保证单个 Partition 内的消息有序,不保证多个 Partition 之间的全局顺序,这样可以在性能和顺序之间进行平衡。

3、kafka的ack机制

Kafka 的 ack 机制用于控制 Producer 发送消息后,Broker 需要多少副本确认成功后才认为消息发送成功,主要有三种级别:

  1. acks=0

    Producer 发送消息后不等待 Broker 响应,直接认为发送成功。性能最高,但可靠性最低,如果消息发送过程中 Broker 宕机,消息可能丢失。

  2. acks=1

    Producer 发送消息后,只需要 Leader 副本写入成功并返回确认即可。性能和可靠性比较均衡,但如果 Leader 写入成功后还没同步给 Follower 就宕机,可能导致消息丢失。

  3. acks=all(或 -1)

    Producer 发送消息后,需要 Leader 和所有 ISR(同步副本)都确认写入成功后才返回成功。可靠性最高,可以最大程度避免消息丢失,但吞吐量会有所下降。

4、Kafka 如何保证消息不丢失?

Producer 端通过设置 acks=all,要求所有 ISR(同步副本)都确认消息写入成功后才返回成功,同时可以开启 retries 重试机制,避免网络异常导致消息发送失败。

Broker 端通过 **副本机制(Replication)**保证数据可靠性。每个 Partition 会有多个副本,Leader 负责读写,Follower 负责同步数据。当 Leader 宕机时,可以从 ISR 副本中选举新的 Leader,避免数据丢失。同时可以合理配置 min.insync.replicas,保证至少多个副本同步成功。

Consumer 端通过手动提交 Offset避免消息丢失。消费者处理完消息后再提交 Offset,如果消费过程中失败,Offset 不会提前提交,重新消费时可以继续处理。

5、Kafka 如何保证 Exactly Once

Kafka 保证 Exactly Once(精确一次语义)主要依靠 幂等 Producer + 事务机制 + 消费端 Offset 管理。

首先,Kafka 通过 **幂等 Producer(enable.idempotence=true)**避免消息重复写入。Producer 会为每个消息分配唯一的 Producer ID(PID)和 Sequence Number,Broker 根据这些信息判断重复消息并丢弃,保证单个 Partition 内消息只写入一次。

其次,Kafka 通过 **事务机制(Transaction)**保证多步操作的原子性。例如 Producer 同时向多个 Partition 写消息,或者同时写消息和提交 Offset 时,可以通过事务保证要么全部成功,要么全部失败,避免部分成功导致数据不一致。

另外,在 Consumer 端通常采用 read_committed 模式读取事务消息,只消费已经提交的消息,同时配合 Offset 提交机制,保证消息处理和 Offset 更新的一致性。

例如 Kafka + Flink 场景中,Flink 会开启 Kafka 事务写入,并通过 Checkpoint 保存状态,当任务失败恢复时,可以回滚未提交的数据,从而实现端到端 Exactly Once。

6、Kafka 消息积压如何处理?

Kafka 消息积压定位首先通过 kafka-consumer-groups 查看 Consumer Lag,确认积压的 Topic 和 Partition;然后对比 Producer TPS 和 Consumer TPS,判断是生产过快还是消费能力不足;

如果是消费者处理能力不足,可以增加 Consumer 数量,提高并行度;同时增加 Topic 的 Partition 数量,让更多 Consumer 可以并行消费。另外可以优化消费逻辑,例如批量拉取消息、减少单条消息处理耗时、异步处理耗时任务。

如果是消费端故障或异常导致积压,需要检查消费者日志,解决异常后恢复消费;如果存在消息处理过慢,可以将耗时任务拆分,通过线程池、异步任务等方式提升吞吐。

7、Kafka Rebalance 为什么发生?

Kafka Rebalance 是消费者组重新分配 Partition 的过程,主要发生在 Consumer 加入/退出、心跳超时、消费处理超时、Partition 变化等场景。Rebalance 会导致短暂消费暂停,因此生产环境需要合理设置 session.timeout.msheartbeat.interval.msmax.poll.interval.ms,并减少频繁 Rebalance。

8、Flink 架构是什么?

Flink 架构主要由 Client、Dispatcher、JobManager 和 TaskManager 组成。用户通过client提交任务 → Client 生成 JobGraph → Dispatcher 接收任务 → JobManager 调度任务、分配资源 → TaskManager 启动 Task 执行 → TaskManager 之间进行数据交换 → JobManager 通过 Checkpoint 实现状态管理和故障恢复。

9、Flink 为什么低延迟?

Flink 低延迟主要依靠 真正流式计算、事件驱动模型、Pipeline 执行、内存状态管理以及异步 Checkpoint 机制,避免了批处理等待和频繁磁盘访问,使 Flink 可以实现毫秒级实时计算。

10、Flink Checkpoint是什么?

Flink Checkpoint 是 Flink 的状态一致性快照机制,通过定期保存 Operator 状态和数据源 Offset,在任务失败后进行恢复,同时结合两阶段提交(Two Phase Commit)保证端到端 Exactly Once。例如 Flink 消费 Kafka 数据时,Checkpoint 会保存 Kafka 的 Offset 和算子状态。如果任务失败恢复时,会从 Checkpoint 中的 Offset 继续消费,实现 Exactly Once。

11、Flink 和 Spark Streaming区别?

12、Flink Watermark是什么?

Watermark 是 Flink 用于处理乱序数据的机制,表示某个时间点之前的数据已经基本到齐。当 Watermark 超过窗口结束时间时,Flink 会触发窗口计算。通过设置允许乱序时间,Watermark 可以在保证计算准确性的同时兼顾实时性。

13、Flink Window有哪些?

Flink 常见窗口有四种:滚动窗口(Tumbling)、滑动窗口(Sliding)、会话窗口(Session) 和 全局窗口(Global)。其中滚动窗口无重叠,滑动窗口可重叠,会话窗口根据空闲时间划分,全局窗口需要配合 Trigger 使用;生产环境中最常用的是 Tumbling Window 和 Sliding Window。

14、Flink State有哪些?

Flink State 主要分为 Keyed State 和 Operator State。Keyed State 是按照 Key 隔离的状态,常用于用户级计算,包括 ValueState、ListState、MapState 等;Operator State 是算子级状态,常用于 Source Offset、广播变量等场景。

15、Flink 状态为什么需要 RocksDB?

Flink 使用 RocksDB 主要是因为内存状态无法支撑大规模 State,而 RocksDB 可以利用磁盘扩展状态容量,并支持增量 Checkpoint,提高大状态任务的稳定性。同时 RocksDB 基于 Key-Value 存储,非常适合 Flink Keyed State 的场景。

16、Flink 数据倾斜怎么解决?

Flink 数据倾斜主要是由于热点 Key 导致部分 Task 数据量过大。解决方式包括:对热点 Key 加盐打散、增加并行度、提前预聚合减少 Shuffle、单独处理热点 Key,以及优化 Key 设计。如果是 Join 倾斜,可以使用 Broadcast Join 或调整 Join 策略解决。

17、Flink反压如何产生?

Flink 反压是由于下游算子处理速度低于上游数据产生速度导致的。数据会在网络 Buffer 中堆积,当 Buffer 满后,下游压力会逐渐向上游传播,最终限制 Source 数据读取速度。常见解决方式包括增加并行度、优化算子逻辑、解决数据倾斜、批量写入以及扩容计算资源。

相关推荐
瓦学妹2 小时前
什么是网络索引?它是如何工作的?
大数据·网络·python·网络爬虫
天天爱吃肉82182 小时前
商用车多体动力学实战笔记|第6篇:动力传动系统(发动机、变速箱、分动器、TCS、LSD限滑差速)
大数据·人工智能·笔记·python·嵌入式硬件·汽车
EAIReport4 小时前
工业电气自动化数据治理破局:多Agent大模型赋能全景智能决策
大数据·运维·自动化
一名普通的电源工程师5 小时前
E0512XT-1WR3 适配优选 钡特电源 DF1-05D12XT|1W 隔离5V转±12V模块电源选型参数技术解析
大数据·网络·人工智能
SelectDB5 小时前
Apache Doris 2026 Roadmap:AI 时代数据基础设施如何选型?Doris 给出了三层架构答案
大数据
Think_Higher5 小时前
CID行业趋势周报|7.27—8.02:大盘表现、重点赛道与投测建议
大数据·人工智能
林澈在路上6 小时前
2026 主流 AI 写歌 APP 全面测评|零基础原创歌曲工具选购指南
大数据·人工智能·aigc·音视频·音频
Flink_China6 小时前
Flink OSS CDC: 让AI多模态数据处理实时化
flink
2501_946736166 小时前
在线考试平台如何选型?从功能、优势与应用场景角度详解
大数据·人工智能·算法
字节跳动数据平台7 小时前
文件上传即可检索|实时多模态向量链路落地实践分享
大数据