Skip to content

Commit 63afcb1

Browse files
committed
feat: init
1 parent 8223057 commit 63afcb1

File tree

2 files changed

+14
-16
lines changed

2 files changed

+14
-16
lines changed

09消息队列/2对比.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@
4141
### **如何保证 MQ 消息顺序?**
4242
**回答:**
4343
1. **单个分区(单个队列)**
44-
-**Kafka** 中,同一类消息写入同一个分区
44+
-**Kafka** 中,同一类消息写入同一个分区,key 相同,或者强制指定分区
4545
-**RabbitMQ** 中,只让一个消费者消费该队列
4646
2. **有序消费**
4747
- **Kafka**:消费者按 **同一分区** 读取消息

09消息队列/4Kafka.md

Lines changed: 13 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -83,16 +83,15 @@ Kafka 通过副本机制和持久化存储来保证消息不丢失。消息写
8383
- 使用合理的消息存储和清理策略。
8484

8585

86+
### 常见面试问题
8687
1. kafka管理
8788

8889
所有的broker都去zk上注册一个临时节点,只有一个可以注册成功,这个就是leader(controller),其他就是broker follower
8990
leader会watch broker follower ,一旦有宕机的,就会读取zk上这个broker的partition,并选举ISR中replica作为partition leader
9091

9192
2. 为什么kafka只能同一个组中的一个consumer去消费数据
92-
93-
因为不想使用悲观锁来控制并发,这样吞吐量会下降,如果觉得效率不高的时候,加partition的数量来横向拓展,如果想多个不同的业务消费同样的数据
94-
就启动多个consumer group,最优的设计就是,consumer group下的consumer thread的数量等于partition数量,这样效率是最高的
95-
93+
- 因为不想使用悲观锁来控制并发,这样吞吐量会下降,如果觉得效率不高的时候,加partition的数量来横向拓展。
94+
- 如果想多个不同的业务消费同样的数据,就启动多个consumer group,最优的设计就是,consumer group下的consumer thread的数量等于partition数量,这样效率是最高的
9695

9796
3. producer将数据push给broker,consumer将数据pull进行处理,这样的好处是,broker设计简单,不需要感知consumer
9897
的存在,consumer也不会有较大的压力,处理多少拿多少
@@ -146,19 +145,9 @@ kafka在所有broker中选出一个controller,所有Partition的Leader选举
146145
- 一个消费组,下面可以有多个消费者,策略(如:轮询)消费不同分区数据。
147146
- 多个消费组,每组都可以消费同样的topic下的全部数据。
148147

149-
### **如何优化 Kafka 的性能?**
150-
1. **优化生产者**
151-
- **批量发送**`batch.size` 调大)
152-
- **压缩消息**`compression.type` 设置为 `snappy`
153-
- **异步发送**`acks=1``acks=0` 提高吞吐)
154-
2. **优化 Broker**
155-
- **增加分区数**`num.partitions`
156-
- **副本异步刷盘**`unclean.leader.election.enable=true`
157-
3. **优化消费者**
158-
- **多线程消费**`poll()` 处理更多数据)
159-
- **手动提交偏移量**(避免重复消费)
160148

161149
16. 如何观察 Kafka 负载变化
150+
162151
```shell
163152
GROUP TOPIC PARTITION CURRENT-OFFSET LOG-END-OFFSET LAG CONSUMER-ID
164153
my-consumer-group my-topic 0 1000 1100 100 consumer-1
@@ -170,6 +159,15 @@ my-consumer-group my-topic 1 950 1050 100
170159
- LAG 值:表示未消费的消息量,若 LAG 过大,说明消费速度跟不上生产速度。
171160

172161

162+
17. kafka扩容
163+
164+
|**扩容类型**| 是否自动? | 关键依赖 |
165+
|----------------------|---------------------------|--------------------------|
166+
| Broker 节点扩容 | 否(需手动或工具辅助) | 分区重分配工具 |
167+
| Topic 分区扩容 | 否(必须手动修改配置) | `kafka-topics.sh --alter` |
168+
| 副本扩容 | 否(需手动指定副本分布) | 副本分配策略 |
169+
170+
173171

174172

175173

0 commit comments

Comments
 (0)