
1) 【一句话结论】
核心采用“分层解耦+状态驱动”的实时流处理架构,以Kafka作为高吞吐、持久化的日志缓冲层,Flink作为支持Exactly-Once语义的实时计算引擎,通过状态管理和检查点实现容错,ES/ClickHouse作为分布式存储,满足360安全产品(如0-day攻击检测、多设备日志)的秒级延迟与百万级QPS需求,具备水平扩展与容错能力。
2) 【原理/概念讲解】
流处理系统需解决“实时性、可靠性、扩展性”三大问题,类比“流水线生产”:每个安全日志是“原材料”,需快速传递、加工。
3) 【对比与适用场景】
| 组件 | 定义 | 关键特性 | 使用场景 | 注意点 |
|---|---|---|---|---|
| Kafka | 分布式消息队列 | 主题分区、持久化、高吞吐 | 日志缓冲、流缓冲 | 分区数需根据生产者/消费者数量和集群资源调整,过多分区增加管理复杂度 |
| Flink | 实时流处理引擎 | 状态管理、低延迟、Exactly-Once | 实时计算(如攻击分类、威胁评估) | 并行度需根据业务延迟要求(如秒级)和集群资源(CPU、内存)配置,状态操作过多会导致延迟 |
| ES | 分布式搜索存储 | 高效查询、实时索引 | 结果查询、告警触发 | 分片数影响查询性能,扩容需考虑查询负载均衡 |
| ClickHouse | 分布式分析存储 | 高效聚合、实时统计 | 威胁趋势分析、报表 | 分片数需根据聚合操作复杂度和查询频率调整 |
4) 【示例】(病毒扫描日志实时统计,含错误处理与加密):
Properties props = new Properties();
props.put("bootstrap.servers", "kafka-1:9092,kafka-2:9092");
props.put("security.protocol", "SSL");
props.put("ssl.truststore.location", "truststore.jks");
props.put("ssl.keystore.location", "keystore.jks");
props.put("ssl.keystore.password", "password");
props.put("ssl.truststore.password", "password");
Producer producer = new KafkaProducer<>(props);
producer.send(new ProducerRecord<>("security_logs", "virus_scan:malware_found"));
producer.close();
val env = StreamExecutionEnvironment.getExecutionEnvironment
env.setParallelism(8) // 调整并行度
val source = env.addSource(new FlinkKafkaConsumer[SecurityLog](
"security_logs", new SecurityLogDecoder, props))
.setParallelism(4) // 消费者并行度
val processed = source
.map(log => {
try {
(log.eventType, 1)
} catch (ParseException e) {
// 日志解析失败,记录告警并重试
log.warn(s"日志解析失败: ${log.rawLog}, 重试中")
(log.eventType, 1) // 简化处理,实际需重试逻辑
}
})
.keyBy(_._1)
.sum(1)
.addSink(new ElasticsearchSink(...)) // 输出到ES
env.enableCheckpointing(1000) // 检查点间隔1秒
env.execute("Security Event Analysis")
5) 【面试口播版答案】
“面试官您好,针对360安全产品的实时安全事件分析系统,我设计的核心架构是‘Kafka缓冲层-Flink计算引擎-ES/ClickHouse存储层’的分层结构。首先,日志源(如病毒扫描、网络攻击日志)通过Kafka作为缓冲,利用主题分区实现百万级QPS的吞吐,同时Kafka的持久化(多副本、ISR机制)确保数据不丢失。然后,Flink作为流处理引擎,通过状态管理和每秒一次的检查点实现容错,处理逻辑包括日志解析(支持多设备格式)、攻击类型分类(如0-day攻击检测)、威胁等级评估,满足秒级延迟。处理结果存储到ES(支持实时搜索)和ClickHouse(支持趋势分析),可对接告警系统。容错方面,Flink检查点与Kafka持久化共同保障故障恢复;水平扩展上,Kafka增加分区数、Flink调整并行度、ES增加分片,实现弹性伸缩。比如,针对0-day攻击,系统会实时检测异常日志格式,触发告警并重试解析,确保不遗漏威胁。”
6) 【追问清单】
7) 【常见坑/雷区】