[{"data":1,"prerenderedAt":919},["ShallowReactive",2],{"post-\u002Fposts\u002Fkafka-producer-broker-consumer":3,"all-posts-nav":636},{"id":4,"title":5,"body":6,"categories":618,"date":620,"description":621,"draft":622,"extension":623,"hidden":622,"meta":624,"navigation":625,"path":626,"published":622,"seo":627,"stem":628,"tags":629,"__hash__":635},"posts\u002Fposts\u002Fkafka-producer-broker-consumer.md","Kafka 入门：生产者、Broker、消费者和“消费”到底是什么意思",{"type":7,"value":8,"toc":604},"minimark",[9,18,21,32,35,57,62,68,71,77,80,83,89,92,95,109,113,119,122,139,142,219,222,228,231,237,241,247,250,256,259,276,279,285,288,292,298,301,324,327,333,335,340,344,350,353,359,362,368,374,380,384,387,390,396,399,402,408,412,415,418,424,427,430,433,438,445,451,454,458,461,463,469,472,475,478,482,485,488,490,496,499,502,505,507,513,516,519,522,528,531,557,560,563,568,571,576,579,597,600],[10,11,12,13,17],"p",{},"Kafka 可以理解成一个",[14,15,16],"strong",{},"高吞吐、可持久化、可横向扩展的消息中间件","。",[10,19,20],{},"最简单的结构是：",[22,23,29],"pre",{"className":24,"code":26,"language":27,"meta":28},[25],"language-text","Producer  ->  Kafka Broker  ->  Consumer\n生产消息        存储消息           读取并处理消息\n","text","",[30,31,26],"code",{"__ignoreMap":28},[10,33,34],{},"如果把 Kafka 想成一个物流系统：",[36,37,38,42,45,48,51,54],"ul",{},[39,40,41],"li",{},"Producer 是发货的人。",[39,43,44],{},"Broker 是中转仓库。",[39,46,47],{},"Consumer 是收货并处理包裹的人。",[39,49,50],{},"Topic 是不同类型货物的分类。",[39,52,53],{},"Partition 是同一个分类下的多个货架。",[39,55,56],{},"Offset 是货架上一件货物的编号。",[58,59,61],"h2",{"id":60},"kafka-的作用是什么","Kafka 的作用是什么",[10,63,64,65,17],{},"Kafka 最核心的作用是：",[14,66,67],{},"解耦、削峰填谷、持久化事件流",[10,69,70],{},"比如推荐系统里，用户会不断产生行为：",[22,72,75],{"className":73,"code":74,"language":27,"meta":28},[25],"曝光\n点击\n点赞\n收藏\n评论\n关注\n下单\n",[30,76,74],{"__ignoreMap":28},[10,78,79],{},"这些行为不能每来一条就同步通知所有下游系统。否则推荐主链路会被拖慢，下游任何一个系统变慢，也会反过来影响用户请求。",[10,81,82],{},"更合理的方式是先把事件写入 Kafka：",[22,84,87],{"className":85,"code":86,"language":27,"meta":28},[25],"用户点击视频\n  -> 日志服务把点击事件写入 Kafka\n  -> 实时特征任务消费 Kafka，更新用户短期兴趣\n  -> 数据仓库任务消费 Kafka，做离线分析\n  -> 风控任务消费 Kafka，识别异常行为\n  -> 模型训练任务消费 Kafka，生成训练样本\n",[30,88,86],{"__ignoreMap":28},[10,90,91],{},"这样推荐服务只需要快速把事件写出去，不需要等待所有下游处理完。",[10,93,94],{},"这就是 Kafka 的价值：",[36,96,97,100,103,106],{},[39,98,99],{},"解耦：生产者和消费者互相不依赖。",[39,101,102],{},"削峰：流量高峰时先堆在 Kafka，消费者按自己的能力慢慢处理。",[39,104,105],{},"持久化：消息会存到磁盘，消费者挂了也可以恢复后继续读。",[39,107,108],{},"广播给多系统：同一份用户行为日志可以被多个业务系统使用。",[58,110,112],{"id":111},"生产者-producer-是什么","生产者 Producer 是什么",[10,114,115,116,17],{},"Producer 就是",[14,117,118],{},"生产消息、写入 Kafka 的系统",[10,120,121],{},"常见生产者：",[36,123,124,127,130,133,136],{},[39,125,126],{},"推荐服务。",[39,128,129],{},"日志采集服务。",[39,131,132],{},"订单服务。",[39,134,135],{},"埋点 SDK。",[39,137,138],{},"后端业务服务。",[10,140,141],{},"一条用户点击消息可能长这样：",[22,143,147],{"className":144,"code":145,"language":146,"meta":28,"style":28},"language-json shiki shiki-themes github-dark-dimmed github-light","{\n  \"user_id\": 123,\n  \"item_id\": 456,\n  \"event\": \"click\",\n  \"timestamp\": 1710000000\n}\n","json",[30,148,149,158,175,188,202,213],{"__ignoreMap":28},[150,151,154],"span",{"class":152,"line":153},"line",1,[150,155,157],{"class":156},"ssh_m","{\n",[150,159,161,165,168,172],{"class":152,"line":160},2,[150,162,164],{"class":163},"sJK54","  \"user_id\"",[150,166,167],{"class":156},": ",[150,169,171],{"class":170},"swcJU","123",[150,173,174],{"class":156},",\n",[150,176,178,181,183,186],{"class":152,"line":177},3,[150,179,180],{"class":163},"  \"item_id\"",[150,182,167],{"class":156},[150,184,185],{"class":170},"456",[150,187,174],{"class":156},[150,189,191,194,196,200],{"class":152,"line":190},4,[150,192,193],{"class":163},"  \"event\"",[150,195,167],{"class":156},[150,197,199],{"class":198},"sXfbr","\"click\"",[150,201,174],{"class":156},[150,203,205,208,210],{"class":152,"line":204},5,[150,206,207],{"class":163},"  \"timestamp\"",[150,209,167],{"class":156},[150,211,212],{"class":170},"1710000000\n",[150,214,216],{"class":152,"line":215},6,[150,217,218],{"class":156},"}\n",[10,220,221],{},"Producer 会把这条消息发送到某个 Kafka topic，比如：",[22,223,226],{"className":224,"code":225,"language":27,"meta":28},[25],"user_behavior_topic\n",[30,227,225],{"__ignoreMap":28},[10,229,230],{},"一句话：",[232,233,234],"blockquote",{},[10,235,236],{},"Producer 负责把业务事件变成消息，并写入 Kafka。",[58,238,240],{"id":239},"broker-是什么","Broker 是什么",[10,242,243,244,17],{},"Broker 是 Kafka 的",[14,245,246],{},"服务器节点",[10,248,249],{},"一个 Kafka 集群通常由多个 Broker 组成：",[22,251,254],{"className":252,"code":253,"language":27,"meta":28},[25],"Kafka Cluster\n  Broker 1\n  Broker 2\n  Broker 3\n",[30,255,253],{"__ignoreMap":28},[10,257,258],{},"Broker 负责：",[36,260,261,264,267,270,273],{},[39,262,263],{},"接收 Producer 发来的消息。",[39,265,266],{},"把消息写入磁盘。",[39,268,269],{},"按 Topic 和 Partition 管理消息。",[39,271,272],{},"给 Consumer 提供读取能力。",[39,274,275],{},"通过副本机制提高可靠性。",[10,277,278],{},"可以简单理解成：",[22,280,283],{"className":281,"code":282,"language":27,"meta":28},[25],"Broker = Kafka 的存储服务器 \u002F 消息仓库\n",[30,284,282],{"__ignoreMap":28},[10,286,287],{},"消息写进 Kafka 后，不会因为消费者读取了就立刻消失。Kafka 会根据保留策略保存一段时间，比如保存 7 天，或者保存到磁盘空间达到某个上限。",[58,289,291],{"id":290},"消费者-consumer-是什么","消费者 Consumer 是什么",[10,293,294,295,17],{},"Consumer 就是",[14,296,297],{},"从 Kafka 读取消息并处理消息的系统",[10,299,300],{},"常见消费者：",[36,302,303,306,309,312,315,318,321],{},[39,304,305],{},"Flink 实时任务。",[39,307,308],{},"Spark Streaming 任务。",[39,310,311],{},"实时特征服务。",[39,313,314],{},"数据仓库同步任务。",[39,316,317],{},"风控任务。",[39,319,320],{},"搜索索引更新任务。",[39,322,323],{},"推荐训练样本构造任务。",[10,325,326],{},"比如实时特征服务消费点击事件：",[22,328,331],{"className":329,"code":330,"language":27,"meta":28},[25],"读到 user_id=123 点击 item_id=456\n  -> 更新用户最近点击类目\n  -> 更新用户短期兴趣\n  -> 更新用户最近活跃时间\n  -> 写入 Redis \u002F 特征存储\n",[30,332,330],{"__ignoreMap":28},[10,334,230],{},[232,336,337],{},[10,338,339],{},"Consumer 负责从 Kafka 读取消息，然后完成自己的业务逻辑。",[58,341,343],{"id":342},"消费是什么意思","“消费”是什么意思",[10,345,346,347,17],{},"消费就是：",[14,348,349],{},"消费者从 Kafka 读取消息，并处理这些消息",[10,351,352],{},"比如 Kafka 里有三条消息：",[22,354,357],{"className":355,"code":356,"language":27,"meta":28},[25],"offset=0 用户 A 点击视频 1\noffset=1 用户 B 点赞视频 2\noffset=2 用户 A 收藏视频 3\n",[30,358,356],{"__ignoreMap":28},[10,360,361],{},"消费者会按顺序读取并处理：",[22,363,366],{"className":364,"code":365,"language":27,"meta":28},[25],"读 offset=0\n  -> 更新用户 A 的点击特征\n\n读 offset=1\n  -> 更新用户 B 的点赞特征\n\n读 offset=2\n  -> 更新用户 A 的收藏特征\n",[30,367,365],{"__ignoreMap":28},[10,369,370,371,17],{},"这里要注意：",[14,372,373],{},"消费消息不等于删除消息",[10,375,376,377,17],{},"Kafka 的消息通常还会继续保留。消费者只是记录自己读到了哪里，这个位置叫 ",[30,378,379],{},"offset",[58,381,383],{"id":382},"topic-是什么","Topic 是什么",[10,385,386],{},"Topic 是消息的逻辑分类。",[10,388,389],{},"比如：",[22,391,394],{"className":392,"code":393,"language":27,"meta":28},[25],"user_behavior_topic      用户行为日志\norder_event_topic        订单事件\nrecommend_log_topic      推荐日志\npayment_event_topic      支付事件\n",[30,395,393],{"__ignoreMap":28},[10,397,398],{},"Producer 往某个 topic 写消息，Consumer 从某个 topic 读消息。",[10,400,401],{},"可以理解成：",[22,403,406],{"className":404,"code":405,"language":27,"meta":28},[25],"Topic = 一类消息的名字\n",[30,407,405],{"__ignoreMap":28},[58,409,411],{"id":410},"partition-是什么","Partition 是什么",[10,413,414],{},"一个 topic 可以拆成多个 partition。",[10,416,417],{},"例如：",[22,419,422],{"className":420,"code":421,"language":27,"meta":28},[25],"user_behavior_topic\n  partition 0\n  partition 1\n  partition 2\n",[30,423,421],{"__ignoreMap":28},[10,425,426],{},"Partition 的作用是提高并发能力。",[10,428,429],{},"如果一个 topic 只有一个 partition，那么同一时刻能并行处理的能力有限。拆成多个 partition 后，Kafka 可以把数据分散到不同 Broker 上，消费者也可以并行消费。",[10,431,432],{},"但要注意：",[232,434,435],{},[10,436,437],{},"Kafka 只能保证单个 partition 内部有序，不能保证多个 partition 之间全局有序。",[10,439,440,441,444],{},"如果想保证同一个用户的行为有序，可以用 ",[30,442,443],{},"user_id"," 作为 key，让同一个用户的消息进入同一个 partition。",[22,446,449],{"className":447,"code":448,"language":27,"meta":28},[25],"key = user_id\n",[30,450,448],{"__ignoreMap":28},[10,452,453],{},"这样用户 A 的行为会进入同一个 partition，在这个 partition 内按顺序消费。",[58,455,457],{"id":456},"offset-是什么","Offset 是什么",[10,459,460],{},"Offset 是消息在 partition 里的编号。",[10,462,417],{},[22,464,467],{"className":465,"code":466,"language":27,"meta":28},[25],"partition 0:\n  offset 0  用户 A 点击\n  offset 1  用户 B 点赞\n  offset 2  用户 C 收藏\n",[30,468,466],{"__ignoreMap":28},[10,470,471],{},"Consumer 通过 offset 记录自己消费到哪里了。",[10,473,474],{},"如果消费者处理到 offset 100 后挂了，重启后可以从 offset 101 继续读。",[10,476,477],{},"这也是 Kafka 能支持失败恢复的原因之一。",[58,479,481],{"id":480},"consumer-group-是什么","Consumer Group 是什么",[10,483,484],{},"Consumer Group 是一组消费者。",[10,486,487],{},"同一个 Consumer Group 里的多个消费者会共同消费一个 topic。",[10,489,417],{},[22,491,494],{"className":492,"code":493,"language":27,"meta":28},[25],"user_behavior_topic 有 3 个 partition\n\nConsumer Group: feature_job\n  Consumer 1 消费 partition 0\n  Consumer 2 消费 partition 1\n  Consumer 3 消费 partition 2\n",[30,495,493],{"__ignoreMap":28},[10,497,498],{},"这样可以提高消费速度。",[10,500,501],{},"同一个 partition 在同一个 Consumer Group 内，同一时刻只会分配给一个 Consumer。这样可以避免同一组里的多个消费者重复处理同一条消息。",[10,503,504],{},"但不同 Consumer Group 之间互不影响。",[10,506,417],{},[22,508,511],{"className":509,"code":510,"language":27,"meta":28},[25],"feature_job 消费用户行为，更新实时特征\nwarehouse_job 消费用户行为，写入数仓\nrisk_job 消费用户行为，做风控检测\n",[30,512,510],{"__ignoreMap":28},[10,514,515],{},"它们可以同时消费同一个 topic，各自维护自己的 offset。",[58,517,518],{"id":518},"推荐系统里的完整例子",[10,520,521],{},"以抖音推荐里的点击事件为例：",[22,523,526],{"className":524,"code":525,"language":27,"meta":28},[25],"用户点击视频\n  -> 推荐服务生成 click event\n  -> Producer 写入 user_behavior_topic\n  -> Kafka Broker 持久化消息\n  -> Flink Consumer 消费消息\n  -> 更新用户实时兴趣特征\n  -> 特征写入在线特征存储\n  -> 下一次推荐请求使用新特征\n",[30,527,525],{"__ignoreMap":28},[10,529,530],{},"这条链路里：",[36,532,533,536,539,542,545,551,554],{},[39,534,535],{},"推荐服务是 Producer。",[39,537,538],{},"Kafka 集群里的机器是 Broker。",[39,540,541],{},"Flink 实时任务是 Consumer。",[39,543,544],{},"读取并处理点击事件的过程叫消费。",[39,546,547,550],{},[30,548,549],{},"user_behavior_topic"," 是 Topic。",[39,552,553],{},"Topic 下面的多个分片是 Partition。",[39,555,556],{},"每条消息在 Partition 里的编号是 Offset。",[58,558,559],{"id":559},"面试怎么一句话总结",[10,561,562],{},"可以这样说：",[232,564,565],{},[10,566,567],{},"Kafka 是一个分布式消息队列，核心作用是把生产者和消费者解耦，并承接高吞吐事件流。Producer 负责写消息，Broker 负责存储和分发消息，Consumer 负责读取并处理消息。消费不是删除消息，而是消费者读取消息后提交 offset，记录自己处理到哪里。",[10,569,570],{},"放到推荐系统里：",[232,572,573],{},[10,574,575],{},"Kafka 常用于承接用户行为日志，把在线推荐、实时特征、离线数仓、模型训练、风控等系统解耦起来。",[58,577,578],{"id":578},"容易混淆的点",[580,581,582,585,588,591,594],"ol",{},[39,583,584],{},"消费不是删除消息。Kafka 消息会按保留策略保存，消费者只是提交 offset。",[39,586,587],{},"Topic 是逻辑分类，Partition 是物理分片。",[39,589,590],{},"单个 Partition 内有序，多个 Partition 之间不保证全局有序。",[39,592,593],{},"同一个 Consumer Group 内，一个 Partition 同时只会被一个 Consumer 消费。",[39,595,596],{},"不同 Consumer Group 可以各自独立消费同一个 Topic。",[10,598,599],{},"把这些概念讲清楚之后，再去背 Kafka 为什么快、如何保证不丢、如何保证顺序，就会顺很多。",[601,602,603],"style",{},"html pre.shiki code .ssh_m, html code.shiki .ssh_m{--shiki-default:#ADBAC7;--shiki-light:#24292E}html pre.shiki code .sJK54, html code.shiki .sJK54{--shiki-default:#8DDB8C;--shiki-light:#005CC5}html pre.shiki code .swcJU, html code.shiki .swcJU{--shiki-default:#6CB6FF;--shiki-light:#005CC5}html pre.shiki code .sXfbr, html code.shiki .sXfbr{--shiki-default:#96D0FF;--shiki-light:#032F62}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}",{"title":28,"searchDepth":160,"depth":177,"links":605},[606,607,608,609,610,611,612,613,614,615,616,617],{"id":60,"depth":160,"text":61},{"id":111,"depth":160,"text":112},{"id":239,"depth":160,"text":240},{"id":290,"depth":160,"text":291},{"id":342,"depth":160,"text":343},{"id":382,"depth":160,"text":383},{"id":410,"depth":160,"text":411},{"id":456,"depth":160,"text":457},{"id":480,"depth":160,"text":481},{"id":518,"depth":160,"text":518},{"id":559,"depth":160,"text":559},{"id":578,"depth":160,"text":578},[619],"技术","2026-06-09","用推荐系统里的用户行为日志为例，讲清楚 Kafka 的作用、Producer、Broker、Consumer、Topic、Partition、Offset 和消费语义。",false,"md",{},true,"\u002Fposts\u002Fkafka-producer-broker-consumer",{"title":5,"description":621},"posts\u002Fkafka-producer-broker-consumer",[630,631,632,633,634],"Kafka","消息队列","后端","面试","推荐系统","7e5gMsZnCGmgvytZD1mlLjUYN_ZuR__NoANvGDJrtGI",[637,651,664,671,681,691,695,705,716,725,735,747,760,772,781,791,804,815,825,833,844,850,856,862,870,880,888,894,902,910],{"slug":638,"path":639,"title":640,"date":641,"tags":642,"description":28,"draft":622,"hidden":622,"published":625,"readingTime":650},"multimodal-rag-from-scratch","\u002Fposts\u002Fmultimodal-rag-from-scratch","从零实现多模态 RAG：BM25、Dense 检索、RRF 融合、MMR 重排全部手写","2026-06-30 18:00:00",[643,644,645,646,647,648,649],"RAG","多模态","AI Infra","BM25","向量检索","混合检索","实习求职",9,{"slug":652,"path":653,"title":654,"date":655,"tags":656,"description":28,"draft":622,"hidden":622,"published":625,"readingTime":663},"mini-llm-engine-deep-dive","\u002Fposts\u002Fmini-llm-engine-deep-dive","讲透 mini-llm-engine：从显存碎片到六大推理优化","2026-06-30 14:00:00",[657,645,658,659,660,661,662,649],"LLM","vLLM","PagedAttention","KV Cache","推理优化","投机解码",11,{"slug":665,"path":666,"title":667,"date":668,"tags":669,"description":28,"draft":622,"hidden":622,"published":625,"readingTime":670},"mini-llm-engine-from-scratch","\u002Fposts\u002Fmini-llm-engine-from-scratch","从零实现 LLM 推理引擎：深挖 vLLM 的六大核心优化","2026-06-30 10:00:00",[657,645,658,659,661,662,649],10,{"slug":672,"path":673,"title":674,"date":620,"tags":675,"description":679,"draft":622,"hidden":622,"published":625,"readingTime":680},"bytedance-recommendation-architecture-intern-interview","\u002Fposts\u002Fbytedance-recommendation-architecture-intern-interview","字节推荐架构实习生 Data 面试准备：推荐系统、实时特征与高并发八股",[633,634,676,677,678],"后端架构","实时计算","字节跳动","面向字节跳动推荐架构团队实习岗位的八股准备清单，覆盖推荐系统链路、实时数据、特征服务、高并发后端、分布式系统与项目包装。",18,{"slug":682,"path":683,"title":684,"date":620,"tags":685,"description":689,"draft":622,"hidden":622,"published":625,"readingTime":690},"high-concurrency-rate-limiting-algorithms","\u002Fposts\u002Fhigh-concurrency-rate-limiting-algorithms","高并发限流算法：固定窗口、滑动窗口、漏桶与令牌桶",[686,687,676,688,633],"高并发","限流","系统设计","面试和工程都常见的限流算法总结，讲清楚固定窗口、滑动窗口、漏桶、令牌桶、并发数限制以及分布式限流如何落地。",12,{"slug":692,"path":626,"title":5,"date":620,"tags":693,"description":621,"draft":622,"hidden":622,"published":625,"readingTime":694},"kafka-producer-broker-consumer",[630,631,632,633,634],8,{"slug":696,"path":697,"title":698,"date":620,"tags":699,"description":704,"draft":622,"hidden":622,"published":625,"readingTime":215},"leetcode-lru-merge-k-reverse-list","\u002Fposts\u002Fleetcode-lru-merge-k-reverse-list","链表与缓存高频题：LRU Cache、合并 K 个有序链表、反转链表",[700,701,702,703,633],"算法","链表","LRU","LeetCode","面试高频算法题速记，整理 LRU Cache、合并 K 个有序链表、反转链表的核心思路、复杂度和 C++ 代码。",{"slug":706,"path":707,"title":708,"date":709,"tags":710,"description":28,"draft":622,"hidden":622,"published":625,"readingTime":715},"meddococr-interpreter-source-analysis","\u002Fposts\u002Fmeddococr-interpreter-source-analysis","MedDocOCR-Interpreter 源码导读：医疗文档 OCR、结构化抽取与报告解读原型","2026-05-22 10:30:00",[711,644,712,643,713,714],"OCR","医疗 AI","Python","源码分析",16,{"slug":717,"path":718,"title":719,"date":720,"tags":721,"description":28,"draft":622,"hidden":622,"published":625,"readingTime":670},"cet6-writing-model-essays","\u002Fposts\u002Fcet6-writing-model-essays","六级写作范文背诵包：10 个高频话题","2026-05-20 09:00:00",[722,723,724],"English","CET6","Writing",{"slug":726,"path":727,"title":728,"date":729,"tags":730,"description":28,"draft":622,"hidden":622,"published":625,"readingTime":734},"claude-code-context-management","\u002Fposts\u002Fclaude-code-context-management","Claude Code 上下文管理机制：从 Microcompact 到 Auto Compact","2026-05-19 10:00:00",[731,732,657,645,733],"Claude Code","Agent","上下文工程",27,{"slug":736,"path":737,"title":738,"date":739,"tags":740,"description":28,"draft":622,"hidden":622,"published":625,"readingTime":746},"nanotron-llm-pretraining-framework-analysis","\u002Fposts\u002Fnanotron-llm-pretraining-framework-analysis","Nanotron 项目详解：Hugging Face 的大模型预训练框架怎么做分布式训练","2026-05-10 12:10:00",[657,741,742,743,744,645,745],"大模型训练","分布式训练","Nanotron","Hugging Face","PyTorch",19,{"slug":748,"path":749,"title":750,"date":751,"tags":752,"description":28,"draft":622,"hidden":622,"published":625,"readingTime":759},"gofoundry-go-backend-foundation-framework","\u002Fposts\u002Fgofoundry-go-backend-foundation-framework","GoFoundry 项目详解：基于 Go 的后端基础框架套件设计","2026-05-10 11:20:00",[753,754,755,756,757,631,758],"Go","后端框架","ORM","分布式缓存","分布式锁","项目架构",25,{"slug":761,"path":762,"title":763,"date":764,"tags":765,"description":28,"draft":622,"hidden":622,"published":625,"readingTime":734},"cloudvault-go-cloud-storage-system","\u002Fposts\u002Fcloudvault-go-cloud-storage-system","CloudVault 项目详解：基于 Go 的云端存储与网盘系统架构设计","2026-05-10 10:30:00",[753,766,767,768,758,769,770,771],"云存储","网盘系统","分布式系统","Redis","RabbitMQ","Elasticsearch",{"slug":773,"path":774,"title":775,"date":776,"tags":777,"description":28,"draft":622,"hidden":622,"published":625,"readingTime":780},"openclaw-source-code-analysis","\u002Fposts\u002Fopenclaw-source-code-analysis","OpenClaw 源码导读：个人 AI 助手的网关、通道、插件与运行时架构","2026-05-08 16:30:00",[778,732,645,779,714],"OpenClaw","TypeScript",20,{"slug":782,"path":783,"title":784,"date":785,"tags":786,"description":28,"draft":622,"hidden":622,"published":625,"readingTime":670},"flow-matching-generative-models","\u002Fposts\u002Fflow-matching-generative-models","Flow Matching：从噪声到数据的连续流生成模型","2026-05-07 00:00:00",[787,788,789,790],"生成模型","Diffusion","Flow Matching","深度学习",{"slug":792,"path":793,"title":794,"date":795,"tags":796,"description":28,"draft":622,"hidden":622,"published":625,"readingTime":803},"database-ai-week4","\u002Fposts\u002Fdatabase-ai-week4","Week 4：数据库速成——从 Storage、Index、Query Optimization 到 Vector DB 与 RAG","2026-05-05 12:00:00",[797,798,799,643,800,801,802],"数据库","CMU 15-445","Vector DB","LLM Memory","Query Optimization","Caching",15,{"slug":805,"path":806,"title":807,"date":808,"tags":809,"description":28,"draft":622,"hidden":622,"published":625,"readingTime":715},"distributed-systems-week3","\u002Fposts\u002Fdistributed-systems-week3","Week 3：分布式系统速成——MapReduce、Raft、容错与 Distributed KV Store","2026-05-05 11:00:00",[768,810,811,812,813,814,732],"MIT 6.824","MapReduce","Raft","KV Store","Ray",{"slug":816,"path":817,"title":818,"date":819,"tags":820,"description":28,"draft":622,"hidden":622,"published":625,"readingTime":803},"gpu-inference-acceleration-week2","\u002Fposts\u002Fgpu-inference-acceleration-week2","Week 2：GPU 与推理加速——从 Kernel、算子融合到 LLM Serving","2026-05-05 10:00:00",[790,821,822,657,823,658,824],"GPU","推理加速","CMU 10-414","TensorRT",{"slug":826,"path":827,"title":828,"date":829,"tags":830,"description":28,"draft":622,"hidden":622,"published":625,"readingTime":680},"dl-framework-autograd-mini","\u002Fposts\u002Fdl-framework-autograd-mini","Week 1：DL 框架与 Autograd——从计算图、反向传播到 Mini Autograd 实现","2026-05-05 09:00:00",[790,831,745,823,832],"Autograd","Mini Framework",{"slug":834,"path":835,"title":836,"date":837,"tags":838,"description":28,"draft":622,"hidden":622,"published":625,"readingTime":690},"lock-free-concurrency-notes","\u002Fposts\u002Flock-free-concurrency-notes","无锁并发入门：从 CAS 到 Atomic Ring Buffer","2026-04-25",[839,840,841,842,843],"C++","并发","无锁编程","性能优化","量化开发",{"slug":845,"path":846,"title":847,"date":848,"tags":849,"description":28,"draft":622,"hidden":622,"published":625,"readingTime":204},"agent-memory","\u002Fposts\u002Fagent-memory","Agent 对话记忆化：从原理到实现","2026-04-24",[657,732,643,633],{"slug":851,"path":852,"title":853,"date":848,"tags":854,"description":28,"draft":622,"hidden":622,"published":625,"readingTime":215},"llm-context-compression","\u002Fposts\u002Fllm-context-compression","LLM 上下文五层压缩机制详解",[657,732,855,633],"上下文压缩",{"slug":857,"path":858,"title":859,"date":860,"tags":861,"description":28,"draft":622,"hidden":622,"published":625,"readingTime":650},"cpp-concurrency-basics","\u002Fposts\u002Fcpp-concurrency-basics","C++ 并发编程入门：从数据竞争到线程池","2026-04-15",[839,840,633,843],{"slug":863,"path":864,"title":865,"date":866,"tags":867,"description":28,"draft":622,"hidden":622,"published":625,"readingTime":153},"travel-in-shenzhen","\u002Fposts\u002Ftravel-in-shenzhen","XCPC 深圳游记","2026-04-13",[868,839,869],"XCPC","比赛",{"slug":871,"path":872,"title":873,"date":874,"tags":875,"description":28,"draft":622,"hidden":622,"published":625,"readingTime":879},"backend-stack-deep-dive","\u002Fposts\u002Fbackend-stack-deep-dive","后端五件套：FastAPI \u002F Node.js \u002F SQLAlchemy async \u002F PostgreSQL \u002F Docker 面试速通","2026-04-07",[632,876,877,878,633],"FastAPI","PostgreSQL","Docker",7,{"slug":881,"path":882,"title":883,"date":884,"tags":885,"description":28,"draft":622,"hidden":622,"published":625,"readingTime":215},"deepscientist-tech-stack","\u002Fposts\u002Fdeepscientist-tech-stack","DeepScientist 技术栈全解析：一个 AI 科研平台的架构设计","2026-04-06",[886,876,887,877,633],"全栈","Next.js",{"slug":889,"path":890,"title":891,"date":884,"tags":892,"description":28,"draft":622,"hidden":622,"published":625,"readingTime":694},"minicode-source-analysis","\u002Fposts\u002Fminicode-source-analysis","MiniCode 源码解析：用 5000 行 TypeScript 实现一个 AI 编程助手",[779,893,657,714,633],"CLI",{"slug":895,"path":896,"title":897,"date":884,"tags":898,"description":28,"draft":622,"hidden":622,"published":625,"readingTime":204},"nova-theme-implementation","\u002Fposts\u002Fnova-theme-implementation","我是怎么从零实现 Nova 主题的",[899,900,901],"Hexo","前端","开源",{"slug":903,"path":904,"title":905,"date":906,"tags":907,"description":28,"draft":622,"hidden":622,"published":625,"readingTime":160},"git-cheatsheet","\u002Fposts\u002Fgit-cheatsheet","Git 常用操作备忘","2026-04-05 14:00:00",[908,909],"Git","工具",{"slug":911,"path":912,"title":913,"date":914,"tags":915,"description":28,"draft":622,"hidden":622,"published":625,"readingTime":177},"github-actions-intro","\u002Fposts\u002Fgithub-actions-intro","GitHub Actions 入门：自动化你的工作流","2026-04-04 09:00:00",[916,917,918],"GitHub Actions","CI\u002FCD","自动化",1782796012359]