<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>消息队列 on 追风笔记</title><link>https://4f0a9a3b.wangpeng.pages.dev/tags/%E6%B6%88%E6%81%AF%E9%98%9F%E5%88%97/</link><description>Recent content in 消息队列 on 追风笔记</description><generator>Hugo</generator><language>zh</language><lastBuildDate>Tue, 25 Aug 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://4f0a9a3b.wangpeng.pages.dev/tags/%E6%B6%88%E6%81%AF%E9%98%9F%E5%88%97/index.xml" rel="self" type="application/rss+xml"/><item><title>Kafka 存储与消费模型</title><link>https://4f0a9a3b.wangpeng.pages.dev/tech/kafka/storage-consumer/</link><pubDate>Tue, 25 Aug 2026 00:00:00 +0000</pubDate><guid>https://4f0a9a3b.wangpeng.pages.dev/tech/kafka/storage-consumer/</guid><description>&lt;p&gt;Kafka 的高性能依赖于「分区日志 + 顺序写 + 批量拉取」的设计。理解存储与消费模型，才能合理配置并行度与避免重复消费。&lt;/p&gt;&#10;&lt;h2 id="topic-与-partition"&gt;Topic 与 Partition&#10;&lt;/h2&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;strong&gt;topic&lt;/strong&gt; 是逻辑主题，&lt;strong&gt;partition&lt;/strong&gt; 是物理并行单位，消息只追加写入分区末尾。&lt;/li&gt;&#10;&lt;li&gt;每个分区是一个有序、不可变的日志，由多个 segment 文件组成，并维护 offset（分区内唯一递增）。&lt;/li&gt;&#10;&lt;li&gt;分区数决定了消费的并行上限：一个分区同一时刻只被 group 内一个消费者消费。&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="offset-与消费位移"&gt;Offset 与消费位移&#10;&lt;/h2&gt;&#10;&lt;p&gt;消费者处理完消息后提交的位移称为 &lt;strong&gt;offset&lt;/strong&gt;，Kafka 将其保存在内部 topic &lt;code&gt;__consumer_offsets&lt;/code&gt; 中：&lt;/p&gt;&#10;&lt;div class="td-code td-code--untitled" id="td-code-de365f5c-fence-0" data-td-code data-td-code-auto-id&#10; data-td-language="text" data-td-line-count="4"&gt;&#10; &lt;div class="td-code__viewport" id="td-code-de365f5c-fence-0-viewport" data-td-code-viewport&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Producer -&amp;gt; [partition-0: 0,1,2,3 ...]&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ^&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; | committed offset (group A)&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Consumer group A 从 offset=4 继续拉取&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;p&gt;位移提交方式影响可靠性：&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;strong&gt;自动提交&lt;/strong&gt;：间隔提交，可能丢失（提交后未处理崩溃）或重复（处理中崩溃未提交）。&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;手动提交&lt;/strong&gt;：处理成功后再提交，配合幂等可实现至少一次/精确一次。&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="consumer-group-与-rebalance"&gt;Consumer Group 与 Rebalance&#10;&lt;/h2&gt;&#10;&lt;p&gt;同一 group 内的消费者共同消费 topic 的全部分区，分区在成员间均衡分配。当成员加入/退出时触发 &lt;strong&gt;rebalance&lt;/strong&gt;，重新分配分区。频繁 rebalance 会暂停消费，应控制 &lt;code&gt;session.timeout&lt;/code&gt; 与 &lt;code&gt;heartbeat.interval&lt;/code&gt; 并避免消费耗时过长。&lt;/p&gt;</description></item></channel></rss>