@@ -83,16 +83,15 @@ Kafka 通过副本机制和持久化存储来保证消息不丢失。消息写
8383- 使用合理的消息存储和清理策略。
8484
8585
86+ ### 常见面试问题
86871 . kafka管理
8788
8889所有的broker都去zk上注册一个临时节点,只有一个可以注册成功,这个就是leader(controller),其他就是broker follower
8990leader会watch broker follower ,一旦有宕机的,就会读取zk上这个broker的partition,并选举ISR中replica作为partition leader
9091
91922 . 为什么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
97963 . 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
16114916 . 如何观察 Kafka 负载变化
150+
162151``` shell
163152GROUP TOPIC PARTITION CURRENT-OFFSET LOG-END-OFFSET LAG CONSUMER-ID
164153my-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