面试题:如何用Flink实时计算QPS

Flink 实时计算 QPS 面试题

题目:
假设某互联网应用日活用户 100 万,每天产生 1 亿条数据(日志/事件),要求使用 Apache Flink 实现实时计算系统的 QPS(Queries Per Second),并考虑以下需求:

  1. 实时统计当前 QPS(每秒请求数),并输出到监控系统(如 Prometheus、Kafka、MySQL 等)。

  2. 处理数据倾斜,某些 key(如热门用户或接口)可能产生大量数据,如何优化?

  3. 保证 Exactly-Once 语义,确保 QPS 计算不丢不重。

  4. 应对高峰流量,假设瞬时 QPS 可能达到 10,000,如何保证 Flink 作业的稳定性和低延迟?

问题:

  1. 请设计 Flink 作业的数据流(Source → Transformation → Sink),并说明关键算子(如 windowkeyByaggregate)的作用。

  2. 如何实现 QPS 的滑动窗口(如每 1s 计算一次最近 10s 的 QPS)?

  3. 如果某些 key 的数据量远高于其他 key(数据倾斜),你会如何优化?

  4. 如何保证 Exactly-Once 语义?请结合 Checkpoint 和 StateBackend 说明。

  5. 如果 QPS 突增导致反压(Backpressure),你会如何调整 Flink 作业配置?


考察点

✅ Flink 核心概念:Window、KeyedStream、State、Checkpoint
✅ 性能优化:数据倾斜处理、反压调优
✅ 容错机制:Exactly-Once 实现方式
✅ 生产经验:监控、Sink 适配、资源分配


参考答案(简要版)

1. Flink 作业设计
DataStream<LogEvent> source = env.addSource(new KafkaSource<>(...)); // 从 Kafka 消费日志  
DataStream<Tuple2<String, Long>> mapped = source  .map(event -> Tuple2.of(event.getEndpoint(), 1L)) // 转换为 (endpoint, 1)  .returns(Types.TUPLE(Types.STRING, Types.LONG));  // 按接口名分组,计算每 10s 滑动窗口(每 1s 输出一次)  
DataStream<QpsResult> qpsStream = mapped  .keyBy(t -> t.f0) // 按接口分组(可能数据倾斜)  .window(SlidingProcessingTimeWindows.of(Time.seconds(10), Time.seconds(1)))  .aggregate(new QpsAggregator()) // 自定义聚合函数  .addSink(new PrometheusSink()); // 输出到监控系统  
2. 数据倾斜优化
  • 方案 1:加随机前缀,如 hot_key → hot_key_1hot_key_2,聚合后再合并。

  • 方案 2:使用 rebalance() 强制均匀分发,牺牲局部有序性。

3. Exactly-Once 保证
  • Checkpoint 机制:开启 enableCheckpointing(5000),设置 CheckpointingMode.EXACTLY_ONCE

  • StateBackend:使用 RocksDBStateBackend(大状态)或 FsStateBackend(低延迟)。

  • Sink 端:Kafka 事务 / 幂等写入(如 MySQL 用 INSERT ON DUPLICATE KEY UPDATE)。

4. 反压调优
  • 增加并行度setParallelism(4) 分散负载。

  • 调整缓冲区taskmanager.network.memory.floating-buffers-per-gate

  • 启用 RocksDB 本地 SSD:减少 State 访问延迟。


进阶问题

  • 如果 QPS 计算需要区分成功/失败请求(如 HTTP 200 vs 500),如何修改?

  • 如何用 Flink SQL 实现相同的 QPS 计算?

(面试者可选择继续深入讨论~)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/2778.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

快速部署一个鉴黄服务

1.安装依赖pip install opennsfw22.代码实现import opennsfw2 as n2# 将自动下载预训练模型 open_nsfw_weights.h5 到 C:\Users\Administrator\.opennsfw2\weights # pip install opennsfw2# 单张预测 image_path 1.jpg nsfw_probability n2.predict_image(image_path) print…

【软考中级网络工程师】知识点之入侵防御系统:筑牢网络安全防线

目录一、入侵防御系统基础概念1.1 定义与作用1.2 与其他安全设备的关系二、入侵防御系统工作原理剖析2.1 数据包捕获与预处理2.2 深度包检测&#xff08;DPI&#xff09;技术2.3 威胁特征匹配2.4 行为分析与机器学习辅助检测2.5 威胁处理与响应机制三、入侵防御系统功能全面解析…

多种适用于 MCU 固件的 OTA 升级方案

大家就当看个乐。 Bootloader A区方案 设计说明 ● 存储分区&#xff1a; ○ Bootloader区&#xff1a;存储引导加载程序&#xff0c;负责启动流程、固件验证和升级逻辑。 ○ A区&#xff1a;存储应用程序固件&#xff0c;运行时由Bootloader跳转到A区执行。 ● 升级流程&…

一种适用于 3D 低剂量和少视角心脏单光子发射计算机断层成像(SPECT)的可泛化扩散框架|文献速递-深度学习人工智能医疗图像

Title题目A generalizable diffusion framework for 3D low-dose and few-view cardiacSPECT imaging一种适用于 3D 低剂量和少视角心脏单光子发射计算机断层成像&#xff08;SPECT&#xff09;的可泛化扩散框架01文献速递介绍心血管疾病&#xff08;CVDs&#xff09;是全球范围…

解决“Win7共享文件夹其他电脑网络无法发现共享电脑名称”的问题

要让运行 Windows 7 的电脑被局域网中其他设备&#xff08;包括另一台电脑、手机、NAS 等&#xff09;“发现”&#xff0c;必须同时满足三个条件&#xff1a; 网络发现功能已启用&#xff1b;对应的后台服务已启动&#xff1b;防火墙规则放行。 下面给出最简、最稳妥的 3 步设…

深度学习——03 神经网络(4)-正则化方法价格分类案例

4 正则化 4.1 概述模型拟合的3种状态左边&#xff08;Underfitting 欠拟合&#xff09;&#xff1a;模型太简单&#xff0c;没抓住数据规律。比如用直线硬套弯曲的数据&#xff0c;预测效果差&#xff0c;训练误差和测试误差都大&#xff1b;中间&#xff08;Just right 拟合合…

【深入浅出STM32(1)】 GPIO 深度解析:引脚特性、工作模式、速度选型及上下拉电阻详解

GPIO 深度解析&#xff1a;引脚特性、工作模式、速度选型及上下拉电阻详解一、GPIO概述二、GPIO的工作模式1、简述&#xff08;1&#xff09;4种输入模式&#xff08;2&#xff09;4种输出模式&#xff08;3&#xff09;4种最大输出速度2、引脚速度&#xff08;1&#xff09;输…

C++中的`auto`与`std::any`:功能、区别与选择建议

引言 在C编程中&#xff0c;auto和std::any是两个功能强大但用途不同的工具。理解它们的区别和适用场景对于编写高效、可维护的代码至关重要。本文将详细介绍auto和std::any的基本概念、使用方法、适用场景以及它们之间的区别&#xff0c;并提供选择建议&#xff0c;帮助开发者…

如何把ubuntu 22.04下安装的mysql 8 的 数据目录迁移到另一个磁盘目录

在 Ubuntu 22.04 上迁移 MySQL 8 的数据目录到另一个磁盘&#xff0c;一般可以分为 停库 → 拷贝数据 → 修改配置 → 改权限 → 启动验证 这几个步骤。 我给你一个详细且可回滚的方案&#xff08;不会直接覆盖旧数据&#xff0c;确保安全&#xff09;。1. 检查 MySQL 数据目录…

高防CDN和高防IP的各自优势

高防 CDN 和高防 IP 都是网络安全防护的重要手段&#xff0c;二者基于不同的技术原理&#xff0c;在防护场景和优势上各有侧重。以下详细分析它们的各自优势&#xff1a;一、高防 CDN 的优势高防 CDN&#xff08;Content Delivery Network&#xff0c;内容分发网络&#xff09;…

《红黑树的原理与C++实现:详解平衡艺术的高效构建与操作》

前引&#xff1a;高效的数据结构是算法性能优化的关键。红黑树作为一种自平衡二叉搜索树&#xff0c;以其稳定的性能广泛应用于各类系统&#xff0c;如数据库索引、内存管理和高级语言的标准库 红黑树通过一组严格的规则确保树的高度始终保持在对数级别&#xff0c;从而保证搜索…

基于SpringBoot+Uniapp的非遗文化宣传小程序(AI问答、协同过滤算法、Echarts图形化分析)

“ &#x1f388;系统亮点&#xff1a;AI问答、协同过滤算法、Echarts图形化分析”01系统开发工具与环境搭建前后端分离架构项目架构&#xff1a;B/S架构运行环境&#xff1a;win10/win11、jdk17小程序端&#xff1a;技术&#xff1a;Uniapp&#xff1b;UI库&#xff1a;colorU…