You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

63 lines
4.0 KiB
Markdown

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

# 期末测试 | 这些Kafka核心要点你都掌握了吗
你好,我是胡夕。
《Kafka核心技术与实战》已经结课一段时间了你掌握得怎么样了呢我给你准备了一个结课小测试来帮助你检验自己的学习效果。
这套测试题有选择题和简答题两种形式。选择题共有 20 道题目,考题范围覆盖专栏的 42 讲正文,题目类型为单选题和多选题,满分 100 分系统自动评分。简答题共有5道建议你拿出纸笔写下你的思考和答案然后再和文末的答案进行对照。
还等什么,点击下面按钮开始测试吧!
[![](https://static001.geekbang.org/resource/image/28/a4/28d1be62669b4f3cc01c36466bf811a4.png)](http://time.geekbang.org/quiz/intro?act_id=94&exam_id=190)
## 简答题
1. 如果副本长时间不在ISR中这说明什么
2. 谈一谈Kafka Producer的acks参数的作用。
3. Kafka中有哪些重要组件?
4. 简单描述一下消费者组Consumer Group
5. Kafka为什么不像Redis和MySQL那样支持读写分离
## 答案与解析
1.如果副本长时间不在ISR中这说明什么
**答案与解析:**
如果副本长时间不在ISR中这表示Follower副本无法及时跟上Leader副本的进度。通常情况下你需要查看Follower副本所在的Broker与Leader副本的连接情况以及Follower副本所在Broker上的负载情况。
2.请你谈一谈Kafka Producer的acks参数的作用。
**答案与解析:**
目前acks参数有三个取值0、1和-1也可以表示成all
0表示Producer不会等待Broker端对消息写入的应答。这个取值对应的Producer延迟最低但是存在极大的丢数据的可能性。
1表示Producer等待Leader副本所在Broker对消息写入的应答。在这种情况下只要Leader副本数据不丢失消息就不会丢失否则依然有丢失数据的可能。
\-1表示Producer会等待ISR中所有副本所在Broker对消息写入的应答。这是最强的消息持久化保障。
3.Kafka中有哪些重要组件?
**答案与解析:**
* Broker——Kafka服务器负责各类RPC请求的处理以及消息的持久化。
* 生产者——负责向Kafka集群生产消息。
* 消费者——负责从Kafka集群消费消息。
* 主题——保存消息的逻辑容器,生产者发送的每条消息都会被发送到某个主题上。
4.简单描述一下消费者组Consumer Group
**答案与解析:**
消费者组是Kafka提供的可扩展且具有容错性的消费者机制。同一个组内包含若干个消费者或消费者实例Consumer Instance它们共享一个公共的ID即Group ID。组内的所有消费者协调在一起来消费订阅主题的所有分区。每个分区只能由同一个消费组内的一个消费者实例来消费。
5.Kafka为什么不像Redis和MySQL那样支持读写分离
**答案与解析:**
第一这和它们的使用场景有关。对于那种读操作很多而写操作相对不频繁的负载类型而言采用读写分离是非常不错的方案——我们可以添加很多Follower横向扩展提升读操作性能。反观Kafka它的主要场景还是在消息引擎而不是以数据存储的方式对外提供读服务通常涉及频繁地生产消息和消费消息这不属于典型的读多写少场景。因此读写分离方案在这个场景下并不太适合。
第二Kafka副本机制使用的是异步消息拉取因此存在Leader和Follower之间的不一致性。如果要采用读写分离必然要处理副本滞后引入的一致性问题比如如何实现Read-your-writes、如何保证单调读Monotonic Reads以及处理消息因果顺序颠倒的问题。相反如果不采用读写分离所有客户端读写请求都只在Leader上处理也就没有这些问题了。当然最后的全局消息顺序颠倒的问题在Kafka中依然存在常见的解决办法是使用单分区其他的方案还有Version Vector但是目前Kafka没有提供。