Kafka服务器端

2020-02-05  本文已影响0人  后来丶_a24d

目录


kafka服务器端

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

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

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

kafka是通过一个控制器来确定分区首领的选取,这个控制器其实就是一个broker。集群里第一个启动的broker通过在zookeeper里创建一个临时节点/controller让自己成为控制器,如果这个控制器断开连接,其他的节点通过watch对象得到控制节点小时的通知,会尝试让自己成为新的控制器。
当控制器发现一个broker已经离开集群,它就知道,那些失去首领的分区需要一个新的分区(这些分区刚好在这个broker上)。控制器遍历这些分区,并确定谁应该成为新的首领(简单的说,分区副本列表的下一个副本),然后向所有包含新首领或现有跟随着的broker发送请求。该请求包含了谁是新首领以及谁是新首领的分跟随着的消息。随后,新首领开始处理来自生产者和消费者的消息,而跟随者从新首领那里复制消息。
简而言之,kafka使用zookeeper的临时节点来选举控制器,并在节点加入集群或退出集群时通知控制器,控制器负责在节点加入或者离开集群时进行分区首领选举。控制器通过epoch来避免多个首领的情况(多个集群是有可能出现脑裂, kafka通过每次选举新首领增加epoch的值,当值小于当前epoch则信息无效)。

kafka如何进行复制?

Kafka使用主题来组织数据,每个主题被分为若干分区,每个分区有多个副本。这些副本被保存在broker上,每个broker可以保存成百上千个属于不同主题和分区的副本。
分区副本分为两种,首领副本和跟随者副本,生产者请求和消费者请求都经过首领副本,而跟随者副本为了与首领保持同步,跟随着会向首领发送获取数据的请求,这种请求与消费者为了获取消息而发送的请求是一样的。首领将响应消息发给跟随着,请求消息里包含了跟随着想要获取的消息和偏移量,这些偏移量总是有序的。

kafka是如何处理请求的?

broker会在它监听的每一个端口上运行一个Acceptor线程,这个线程会创建一个连接,并把它交给Processor线程去处理,Processor线程的数量是可以配置的,网络线程复制从客户段获取请求,把它们放进请求队列,然后从响应队列获取响应消息,把它们发送给客户端。


kafka网络.png

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

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

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

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

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

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

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

kafka存储

kafka零拷贝技术

kafka为什么那么快,可参考 Kafka 为什么这么快?


参考文章

上一篇 下一篇

猜你喜欢

热点阅读