
1) 【一句话结论】
采用“Kafka+HDFS+冷热分离+Elasticsearch”的分层分布式架构,结合实时消息队列、海量存储、冷热分离策略及搜索索引,通过传输加密(TLS)和存储加密(AES)保障安全,用Snappy压缩减少存储空间,满足日志的实时性、安全性、压缩与索引需求。
2) 【原理/概念讲解】
要存储海量日志,需拆解为“收集-存储-索引”三步,各组件作用如下:
3) 【对比与适用场景】
| 方案 | 定义 | 特性 | 使用场景 | 注意点 |
|---|---|---|---|---|
| Kafka | 分布式消息队列 | 实时、高吞吐、持久化(默认7天) | 日志收集、事件流 | 需消费端拉取,存储时间有限 |
| HDFS | 分布式文件系统 | 海量存储、高容错、高并发 | 原始日志存储(冷数据) | 读取慢,适合批量处理 |
| Elasticsearch | 分布式搜索引擎 | 实时索引、全文检索 | 日志查询、分析 | 索引占用空间大,需定期清理 |
| 对象存储(如MinIO) | 分布式对象存储 | 弹性扩展、低成本 | 冷数据归档 | 读取慢,适合低频访问 |
4) 【示例】
伪代码展示日志从Kafka写入HDFS并索引到Elasticsearch的过程:
# 1. Kafka生产者发送日志
producer = KafkaProducer(bootstrap_servers='kafka:9092',
value_serializer=lambda v: json.dumps(v).encode('utf-8'))
producer.send('log-topic', {'timestamp': time.time(), 'level': 'INFO', 'message': '操作成功'})
producer.flush()
# 2. HDFS写入原始日志(冷数据)
hdfs = HadoopFileSystem('hdfs://namenode:9000')
with hdfs.open('/logs/raw/2023-10-27.log', 'w') as f:
f.write(json.dumps(log_entry).encode('utf-8'))
# 3. Elasticsearch索引查询日志
es = Elasticsearch(['elasticsearch:9200'])
es.index(index='log-index', body=log_entry)
5) 【面试口播版答案】
在360云安全服务中,存储海量日志需构建分层分布式系统:首先用Kafka作为实时日志收集的缓冲层,保证日志秒级写入;原始日志存入HDFS,利用其海量存储和高容错能力,配合冷热分离(近期日志存HDFS,旧日志转存对象存储),降低成本;查询需求通过Elasticsearch构建索引,支持全文检索;安全性方面,传输用TLS加密,存储用AES-256加密,压缩用Snappy减少空间;这样既满足实时性、安全性、压缩和索引需求,又能高效管理海量日志。
6) 【追问清单】
7) 【常见坑/雷区】