跳转至

期末测试 这些Kafka核心要点,你都掌握了吗?

你好,我是胡夕。

《Kafka核心技术与实战》已经结课一段时间了,你掌握得怎么样了呢?我给你准备了一个结课小测试,来帮助你检验自己的学习效果。

这套测试题有选择题和简答题两种形式。选择题共有 20 道题目,考题范围覆盖专栏的 42 讲正文,题目类型为单选题和多选题,满分 100 分,系统自动评分。简答题共有5道,建议你拿出纸笔,写下你的思考和答案,然后再和文末的答案进行对照。

还等什么,点击下面按钮开始测试吧!

简答题

  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没有提供。

精选留言(15)
  • 镜子中间 👍(9) 💬(1)

    终于看完了Kafka课程,这是我在极客时间学完的第一门课,也是坚持的最久的,期末测试得了80分,仍有进步的空间,感谢胡夕老师,也感谢坚持下来的自己,Mark一下,准备开始二刷了!

    2020-08-20

  • 孙同学 👍(3) 💬(3)

    做完题 85 哈哈 以为自己都忘了。。

    2020-05-10

  • lei 👍(1) 💬(1)

    胡老师,学完源码课然后来的实战课,收获很大。有没有好的讲解分布式的资料呢,能够综合一些学习

    2020-10-23

  • 执芳之手 👍(1) 💬(1)

    老师,你好。我的服务运行了一段时间,发送消息报错:Cannot perform operation after producer has been closed。网上说是,KafkaProducer 已经close了。但是,我不知道为什么被关闭的。

    2020-08-14

  • Godning 👍(0) 💬(3)

    老师,我们在对kafka性能测试时遇到了too many files open问题,单节点服务器是256/48t存储 磁盘做了raid0 集群是三台服务器构成 ,我们对单节点进行测试 启用五个topic 都是单分区 ,写入时带宽几乎占满 。当写入数据量到达3.6t时 系统文件句柄数就超过200w了 导致kafka崩溃 这种情况是kafka本身问题还是系统配置问题还是我们使用的问题呢

    2021-04-28

  • 墙角儿的花 👍(0) 💬(1)

    老师,服务部署在阿里云上,生产者发送消息经常在非上班期间发生超时,如晚8点到第二天8点间出现发送超时(org.apache.kafka.common.errors.TimeoutException),而且根本就没什么qps,一分钟内都是个位数,白天时有一定的qps,但却不会出现超时,阿里云说网络没问题,请问该如何排查呢,谢谢

    2021-04-27

  • H.L. 👍(0) 💬(1)

    kafka集群扩容, reassign主题分区迁移,这个不讲了吗?

    2021-01-14

  • 旭旭 👍(0) 💬(1)

    完整的看了你的这门课 实在不错 有种相见恨晚的感觉 希望老师多推出一些大数据相关的优秀课程!

    2020-12-03

  • 阡陌 👍(0) 💬(3)

    嗯,很多收货。但是也有很多没理解透彻的,准备从头再来一遍,加深理解和记忆。

    2020-08-07

  • Mr.Brooks 👍(0) 💬(1)

    虽然工作中从没用过kafka,依然学到很多。准备去追老师下一个源码课了

    2020-06-12

  • 趁早 👍(0) 💬(1)

    终于看完了,收货颇多,感谢胡总的辛苦付出

    2020-04-20

  • 黑山老妖 👍(0) 💬(1)

    谢谢老师!

    2020-04-17

  • Tc 👍(0) 💬(1)

    老师的解读源码什么时候上

    2020-04-11

  • 剑锋所指 👍(2) 💬(0)

    学完打卡 90分

    2021-08-03

  • Stony.修行僧 👍(1) 💬(0)

    补充一下 如果你的Partition只有一个副本,也就是一个Leader,任何Follower都没有,你认为acks=all有用吗? 当然没用了,因为ISR里就一个Leader,他接收完消息后宕机,也会导致数据丢失。 所以说,这个acks=all,必须跟ISR列表里至少有2个以上的副本配合使用,起码是有一个Leader和一个Follower才可以。 这样才能保证说写一条数据过去,一定是2个以上的副本都收到了才算是成功,此时任何一个副本宕机,不会导致数据丢失。

    2020-10-25