
1) 【一句话结论】:采用“Kafka(批量+零拷贝,延迟≈0.2秒)+ Flink(内存状态+并行优化,延迟≈0.5秒)+ K8s(HPA动态扩缩容,延迟≈0.1秒)”的分布式架构,各环节延迟总和<1秒,且通过多副本、检查点等保证99.99%高可用。
2) 【原理/概念讲解】:老师口吻解释关键组件逻辑。
3) 【对比与适用场景】:
| 组件 | 定义 | 特性 | 使用场景 | 注意点 |
|---|---|---|---|---|
| Kafka | 分布式消息队列 | 高吞吐、持久化、低延迟、多副本、批量发送 | 数据中转,连接生产者(港口企业)与消费者(Flink) | 副本因子≥3,分区数根据数据量(如每个港口企业1个分区) |
| Flink | 分布式流处理引擎 | 低延迟、状态管理、Exactly-Once、内存状态 | 实时聚合、分析(如需求趋势) | 并行度=CPU核心数×2,状态存储用RocksDB |
| K8s | 容器编排工具 | 自动扩缩容、服务发现、故障恢复 | 管理Kafka/Flink容器化部署 | HPA指标:CPU利用率70%,最小/最大副本数3/10 |
4) 【示例】:
producer = KafkaProducer(
bootstrap_servers='kafka:9092',
batch_size=1_048_576, # 1MB批量大小
value_serializer=lambda v: json.dumps(v).encode('utf-8')
)
data = {"port": "大连港", "job": "船舶工程师", "demand": 50}
producer.send('talent_demand', data)
producer.flush() # 确保批量发送
env = StreamExecutionEnvironment.get_execution_environment()
env.set_parallelism(8) # 根据数据量调整
table_env = StreamTableEnvironment.create(env)
table_env.connect(
Kafka()
.topic('talent_demand')
.start_from_latest()
.property("bootstrap.servers", "kafka:9092")
.property("group.id", "demand_consumer")
).in_schema(...).create_temporary_table("raw")
table_env.execute_sql("""
SELECT job, SUM(demand) AS total
FROM raw
GROUP BY job
WINDOW TUMBLING(INTERVAL '1' SECOND)
EMIT CHANGES
""").print()
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
name: kafka-broker-hpa
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: kafka-broker
minReplicas: 3
maxReplicas: 10
metrics:
- type: Resource
resource:
name: cpu
target:
type: Utilization
averageUtilization: 70
5) 【面试口播版答案】:
“面试官您好,针对港口企业技术人才需求分析服务,需要保证数据延迟<1秒且系统高可用,我设计的架构是Kafka + Flink + K8s的分布式方案。首先,港口企业发送数据到Kafka,Kafka通过批量发送(1MB)和零拷贝,将数据传输延迟控制在0.2秒内;然后,Flink消费数据,利用内存状态(RocksDB)加速计算,并行度设置为8,1秒窗口聚合需求,计算延迟约0.5秒;最后,K8s根据CPU使用率自动扩缩容,高峰时增加节点,维持延迟稳定。各环节延迟总和<1秒,且通过多副本、检查点保证99.99%高可用。”
6) 【追问清单】:
7) 【常见坑/雷区】: