kafka权威指南-第五章深入kafka问答式学习

1.kafka是如何维护集群成员关系?

kafka使用走哦keeper来维护集群成员的消息,每一个broker都有一个唯一标识符,这个标识符可以在配置文件中指定,也可以自动生成。当broker启动的时候,他通过创建临时节点把自己的ID注册到走哦keeper中。kafka组件订阅走哦keeper的/brokers/ids的路径,当有broker加入集群或退出集群时,这些组件就可以获得通知。

2.kafka集群中分区首领是如何选取的?

kafka是通过一个控制器来机械能分区首领的选取,这个控制器其实就是一个broker。集群里第一个启动的broker通过在zookeeper里创建一个临时节点/controller让自己成为控制器,如果这个控制器断开连接,其他的节点通过watch对象得到控制节点小时的通知,会尝试让自己成为新的控制器。
当控制器发现一个broker已经离开集群,它就知道,那些失去首领的分区需要一个新的分区(这些分区刚好在这个broker上)。控制器遍历这些分区,并确定谁应该成为新的首领(简单的说,分区副本列表的下一个副本),然后向所有包含新首领或现有跟随着的broker发送请求。该请求包含了谁是新首领以及谁是新首领的分跟随着的消息。随后,新首领开始处理来自生产者和消费者的消息,而跟随者从新首领那里复制消息。

简而言之,kafka使用走哦keeper的临时节点来选举控制器,并在节点加入集群或退出集群时通知控制器,控制器负责在节点加入或者离开集群时进行分区首领选举。控制器通过epoch来避免多个首领的情况。

3.kafka如何进行复制?

Kafka使用主题来组织数据,每个主题被分为若干分区,每个分区有多个副本。这些副本被保存在broker上,每个broker可以保存成百上千个属于不同主题和分区的副本。
分区副本分为两种,首领副本和跟随者副本

生产者请求和消费者请求都经过首领副本,而跟随者副本为了与首领保持同步,跟随着会向首领发送获取数据的请求,这种请求与消费者为了获取消息而发送的请求是一样的。首领将响应消息发给跟随着,请求消息里包含了跟随着想要获取的消息和偏移量,这些偏移量总是有序的。

4.kafka是如何处理请求的?

broker会在它监听的每一个端口上运行一个Acceptor线程,这个线程会创建一个连接,并把它交给Processor线程去处理,Processor线程的数量是可以配置的,网络线程复制从客户段获取请求,把它们放进请求队列,然后从响应队列获取响应消息,把它们发送给客户端。
kafka权威指南-第五章深入kafka问答式学习_第1张图片

5.如果生产请求和消费请求发送到了错误的分区上,怎么办?

错误的分区broker会返回一个非分区首领的错误响应。
对特定的分区的获取请求,kafka客户端要自己负责把生产请求和获取请求发送到正确的broker上。客户端使用元数据请求,查找客户端感兴趣的主题列表。

6.对于生产请求,包含首领副本的broker会做哪些验证?

  1. 发送数据的用户是否有主题写入权限?
  2. 请求里包含的acks值是否有效(只出现0,1,或all)
  3. 去人acks

7.broker是否可以发送指定大小数量的数据?

可以,客户端可以设置broker返回数据的上线也可以设置下限。这样可以减少cpu和网络开销。这样会让broker积累一定的数据量在发送给消费者,还可以设置一个超市时间,告诉broker,如果无法再X时间内积累满足要求的数据,那么久吧当前数据返回给我。

8.客户端可以读取分区首领上的所有数据嘛?

不可以,大部分客户端只能读取已经写入所有同步副本的消息(跟随副本实际上也是消费者)

你可能感兴趣的:(大数据)