Kraken2 简介

做宏基因组分析,总得先回答一个问题:这堆测序 reads 到底来自哪些物种?

2014 年 Kraken 刚出来的时候,我还在用 BLAST 一条条比对,那速度……嗯,等结果等到怀疑人生。后来换到 Kraken 1,再后来就是今天要聊的 Kraken2。说白了,它是个基于 k-mer 的快速分类器。你给它一堆 reads,它给你一个物种标签列表。又快又准,尤其在处理大量短读数据时,优势非常明显。

Kraken2 的核心逻辑

它的工作原理其实不复杂:

  • 预先把所有参考基因组里的 DNA 序列切成固定长度的 k-mer(比如 31 bp),每个 k-mer 映射到最低共同祖先(LCA)节点。
  • 建一个超大哈希表存这些映射关系。
  • 读入 query read,也切 k-mer,查哈希表,得到每个 k-mer 对应的 LCA。
  • 在整条 read 的 k-mer 投票里,挑出覆盖最深的分类路径作为最终分类。

为什么快?哈希表查询是 O(1) 的。我手头 100 万条 reads,Kraken2 十几秒就跑完了,换成 BLAST 起码半天。你想想看,这个差距在工作流里意味着什么。

关键点: Kraken2 不进行序列比对,只做 k-mer 精确匹配。所以速度极快,但对基因组代表性要求高——数据库里没有的物种,它基本认不出来。
Kraken2 工作流程图 Kraken2 分类工作流 原始 FASTQ / FASTA reads 每條 read 切 k‑mer 哈希表查询 (O(1)) LCA 路径投票 输出报告 / 分类标签 重要提示 • k-mer 长度通常设为 31 • 哈希表可占用大量 RAM • 数据库需预先构建 • 支持自定义数据库

我为什么选 Kraken2 而不是其他工具

当年我对比过 Centrifuge、Kaiju、Bracken,最后还是把 Kraken2 作为主力。原因很简单:

需求场景传统方法(BLAST/MEGAN)Kraken2
100 万条 reads 分类耗时数小时 ~ 数天十几秒 ~ 几分钟
内存需求较小(~4 GB)较大(标准库约 50 GB)
灵敏度(已知物种)中等高(k-mer 全覆盖)
新物种检测可鉴定有限(依赖数据库)
命令行易用性复杂多步骤单条命令搞定
我的习惯: 做大规模宏基因组初筛,先用 Kraken2 跑一遍出快速报告,然后对感兴趣的区域再用 BLAST 细调。效率高,也不会漏掉重要的分类。

应用场景与优势

Kraken2 已经被用在非常多实战场景里了。我列几个我亲手碰过的:

  • 临床微生物检测: 从脑脊液、痰液样本里快速识别致病菌。有一次 ICU 送来的样本,Kraken2 不到 1 分钟报出铜绿假单胞菌,帮临床抢了时间。
  • 环境宏基因组: 土壤、海水样本,物种构成复杂。我常用 Kraken2 配合 Bracken 做丰度校正,效果挺稳。
  • 食品微生物安全: 测序一批调味品,想看看有没有沙门氏菌。Kraken2 直接标出可疑 reads,省了培养的时间。
  • 病毒组研究: 虽然病毒基因组小,但 Kraken2 如果搭配病毒专用数据库,也能快速筛查。

它的优势总结下来就三条:

  1. 快 —— 哈希表查询,处理速度是传统方法的几百倍。
  2. 准 —— LCA 机制避免过度分类,特别适合处理未完全组装的短读。
  3. 灵活 —— 支持自定义数据库,你可以只建你关心的物种基因组库,缩内存又提速度。
我曾经踩过的坑: 第一次用 Kraken2 时我没注意数据库版本。默认的 PlusPFP 数据库太大,我的服务器只有 32 GB 内存,直接 OOM 崩了。后来改用 MiniKraken 数据库,内存降到 8 GB。记住,选数据库一定要先看你的机器能扛多少。

快速上手的命令行

安装很简单,conda 一行搞定:

conda install -c bioconda kraken2

跑一个分类也很直白:

kraken2 --db /path/to/kraken2_db --threads 8 \
        --output sample.kraken2.out \
        --report sample.kraken2.report \
        sample.fastq

上面这个命令会输出两个文件。一个是带分类信息的 .out 文件,每行一条 read 的结果;另一个是 .report 文件,汇总了各分类节点的 reads 数、百分比等。我个人一般直接看 report 文件,干净利落。

实战建议: 如果你处理的样本量很大,比如几百个,记得加 --memory-mapping 参数,避免内存浪费。另外,输出文件用 --gzip-compressed 直接压缩,节省磁盘。