Kafka 初探(四)

141 阅读2分钟

「这是我参与2022首次更文挑战的第14天,活动详情查看:2022首次更文挑战」。

  • 面试问题(二)

    • 为什么要用ISR原理呢? 选主的算法很多,比如zk的zab算法,raft的Viewstamped Replication 算法。区别是什么呢?区别很大,但是实现上,就是其他算法的每个replica都需要一个watch来监控选举过程。而kafka是先选出一个controller来执行isr列表的判断。
    • rabbitMQ和kafka的区别: 看了篇文章加上我们上面的结构图,看起来本质的原因是。rabbitMQ缺点是吞吐量不够大。kafka有一个tipic的概念,一个topic可以分布在多个broker机器上(但是partition不同),这样当有很高的请求时,多个机器来一起扛住压力。而rabbitMQ没有topic,他的队列就是在一个broker上,需要一个服务器去承担压力,这也是kafka 为什么可以扛住这么高的qps的原因。
    • kafka怎么保证数据不会丢失: 配置ack参数,或者是ack机制。当ack=0,producer把消息发出去了,partition就算没有数据落到磁盘上也认为数据到了kafka,可以被消费,但是如果此时宕机了,那就完蛋了。当ack=1,就是当partion记录到了这个记录并落到了磁盘上,但是还没有被follwer同步,如果这个时候宕机了,再次选举leader的时候就会缺少这个数据。而kafka默认的是这个模式。当ack=all的时候,必须等到follwer全部同步了才可以。
  • kafka中的zookeeper是干嘛的 zookeeper中存放了关于consumer和broker的信息

    • broker zookeeper记录了所有broker的状态,broker会有一个心跳线程去上报自己的状态。 zookeeper负责kafka的控制器选举,kafka集群中有一个控制器,管理所有分区和副本,当leader挂了,他负责去选举新的leader,我们知道是ISR动态列表。 因此其实zookeeper中保存了一个ISR列表 topic的访问权限,topic的相关信息,比如在那个broker中,有几个parition
    • consumer 在zookeeper中注册 kafka 的每个 partition 只能被消费组中的一个 consumer 消费,kafka 必须知道所有 partition 与 consumer 的关系。 当然了这个parttion可以分配各其他消费组的consumer消费。