第1章:Kraken2与MetaPhlAn的背景与用途
1.1 为什么我们需要这两套工具
宏基因组测序出来后,我们面对的第一道坎就是——这些 reads 到底来自哪些微生物?早期我试过用 BLAST 一条一条比对,结果跑了一整天还没出结果。后来才明白,这种全量比对在数百万条 reads 面前根本跑不动。
于是诞生了两条主流路线:一是像 Kraken2 那样走 精确 k-mer 匹配,用哈希表把参考基因组切成小段,直接查字典;二是像 MetaPhlAn 那样走 标记基因比对,只盯着每个物种特有的“身份证基因”来识别。这两条路线各有各的脾气,咱们得先搞清楚它们的设计初衷。
1.2 Kraken2 的设计哲学:用空间换时间
Kraken2 的核心思路很简单:把所有参考基因组的 k-mer(默认 35 bp)都建成一个巨大的哈希表。每条 reads 进来,拆成 k-mer,去哈希表里查,查到哪个物种就投一票。最后找一条从根到叶子的路径,用 LCA(最近公共祖先)算法决定最终归属。
我个人习惯把 Kraken2 比作一本超厚的词典——每个单词(k-mer)后面直接写着它属于哪个物种。查一个词的时间是 O(1),所以它能在几分钟内处理几百万条 reads。
--exclude 把宿主基因组剔除。
1.3 MetaPhlAn 的设计哲学:用标记基因保证特异性
MetaPhlAn 走的是另一条路。它不依赖整个基因组,而是从数千个参考基因组里挑选出物种特异性标记基因(marker genes)。这些基因在同一个物种内保守,在不同物种间差异明显,相当于每个物种的“身份证”。
运行 MetaPhlAn 时,它会用 Bowtie2 把 reads 比对到标记基因数据库,然后统计每个 marker 的覆盖度和丰度,最后通过内置的马尔可夫链模型进行物种定量。你想想看,因为只比对少量特异性片段,计算量比全基因组比对小得多,但对数据库质量要求极高。
我记得有一回,客户送来一个肠道样本,用 Kraken2 跑出了几百个物种,但用 MetaPhlAn 只检出几十个。我当时觉得 MetaPhlAn 漏掉了太多。后来才知道,Kraken2 的假阳性率其实更高,那些低丰度的“检出”很多是 k-mer 偶然匹配导致的。
1.4 核心差异一览
下面这个表是我自己整理的关键对比点,你可以在实际选型时直接参考:
| 对比维度 | Kraken2 | MetaPhlAn |
|---|---|---|
| 依赖数据 | 全基因组 k-mer 索引 | 物种特异性标记基因 |
| 匹配原理 | 精确 k-mer 匹配 + LCA | Bowtie2 比对 + 丰度模型 |
| 速度 | 快(分钟级处理百万 reads) | 慢(小时级) |
| 内存需求 | 高(标准库 > 100 GB) | 低(< 10 GB) |
| 分类分辨率 | 物种级,偶有菌株级 | 物种级,部分菌株级 |
| 假阳性倾向 | 较高(k-mer 偶然匹配) | 较低(标记基因更严格) |
| 适用场景 | 快速筛选、大规模样本 | 精准定量、菌株鉴别 |
1.5 两种工具的数据流与决策路径
上图对比了输入 reads 后,两条工具各自的处理管道。Kraken2 直接查 k-mer 哈希表,MetaPhlAn 先比对 marker 库再统计。二者的输出格式也不同——Kraken2 报告每个 read 的 LCA 路径,MetaPhlAn 直接给出物种丰度表格。明白了这个流程,后面章节里讲参数调优时你就能快速抓住重点。
1.6 实战选型经验
我遇到过很多初学者上来就问“哪个工具更好?”。说实话,没有绝对的好坏,只有合不合适。这里我总结几条选型原则:
- 样本量大、要求快速出结果 → 优先 Kraken2。我处理过上千个土壤样本,Kraken2 在 32 核服务器上一夜跑完,换成 MetaPhlAn 至少得 3 天。
- 需要精准的物种定量,尤其是低丰度物种 → 优先 MetaPhlAn。它的标记基因策略对低丰度物种更可靠,但记得数据库要定期更新。
- 硬件资源有限 → 也别硬上 Kraken2,标准库需要 100+ GB 内存,而 MetaPhlAn 用 8 GB 内存就能跑。
- 做菌株水平分型 → 两个工具都不完美。Kraken2 的 LCA 会偏向高层级,MetaPhlAn 的标记基因库对菌株特异的标记覆盖有限。这时候我一般会上 Mash 或 StrainPhiAn 做补充。
1.7 典型用法示例
最后放一个我日常用的运行命令,你可以直接复制去测试环境试试:
# Kraken2 快速分类
kraken2 --db /path/to/kraken2_db \
--threads 16 \
--report sample.kraken2.report \
sample.fastq > sample.kraken2.out
# MetaPhlAn 物种定量(v4.0 以上)
metaphlan sample.fastq \
--input_type fastq \
--bowtie2db /path/to/metaphlan_db \
--nproc 16 \
-o sample_metaphlan.txt
跑完后对比一下输出格式——Kraken2 的报告是按分类层级统计的,MetaPhlAn 直接给出物种相对丰度。理解了这两份文件的结构,后面章节我们就会深入拆解里面的核心参数。