设为首页 加入收藏

TOP

Kafka知识点总结二
2018-11-13 16:37:03 】 浏览:87
Tags:Kafka 知识点 总结
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u012050154/article/details/78319299

上一节从各概念入手总结了Kafka的知识,这里从系统结构展开,进一步总结Kafka的知识点。

Kafka以集群的方式部署,集群由多个服务器(Broker)组成,每个Broker的Kafka由哪些层组成呢?答案是:SocketServer(Socket服务层)、KafkaRequestHandlerPool(请求转发层)、Kafka api(业务逻辑层)、Control(集群状态控制层)、Kafka Healthcheck Broker (Broker健康检测层)、TopicConfigManager(topic配置信息监控层)组成。

Broker共处理10种不同的Request:

(1)ProducerRequest:消息生产者向Kafka集群发送消息,或者消息消费者向Kafka集群提交偏移量Offset的值;

(2)TopicMetadataRequest:生产者或者消费者发送获取Topic元数据信息的请求;

(3)FetchRequest:消费者发送ReplicaFetcherThread获取message的请求;

(4)OffsetRequest: 消费者发送获取某个Topic的偏移量的请求;

(5)OffsetCommitRequest:消费者提交偏移量至KAFKA(集群根据配置提交至ZK或者log) ;

(6)OffsetFetchRequest: 消费者发送获取自己提交到KAFKA上的偏移量(如果是ZK上,则消费者自己获取)的请求;

(7)LeaderAndIsrRequest:当某个Topic的Partition的Leader和Isr发生改变时,Controller发送通知给相应的Broker(比如说Leader挂了)的请求;

(8)StopReplicaRequest: 当Broker停止时或者删除某个Topic的分区的Replica时,Controller发送通知相应的Broker停止拷贝副本的请求;

(9)UpdateMetadataRequest:当Topic的元数据信息发生变化时,Controller发送通知给相应的Broker的请求;

(10)BrokerControlledShutdownRequest:当集群内某个Broker关机的时候,Broker(作为Leader的Controller)接收到的对应的Broker准备关机的请求 ;


1、SocketServer(Socket服务层)

SocketSever内部开启一个Acceptor(一个独立的线程)接收Sock的网络请求,以轮询的方式将请求转发给N个处理线程Processor,Processor将接受到的Request存放至阻塞队列RequestQueue中M个处理线程从RequestChannel的请求阻塞队列RequestQueue中获取请求,调用Kafka Api处理,然后Processor从ResponseQueue[i]中取回对应的处理结果(每个Processor都有一个对应的编号i)

SocketServer与KafkaRequestHandlerPool之间通过RequestChannel通信,Request与Response通过该通道传输数据。这样Processor就负责接收Connection的Request并发送处理的结果Response,即Processor将各自对应的Connection的Request存进RequestQueue中,然后对ResponseQueue[i]中取出对应的Response。

2、KafkaRequestHandlerPool(请求转发层)

开启M个处理线程,从RequestChannel.RequestQueue中拿到具体的Request,然后把处理后的结果放到ResponseQueue[i]中。

3、KafkaApi(业务逻辑处理层)

由ReplicaManager(副本管理模块)、LogManager(日志管理模块)、OffsetManager(偏移量管理模块)共同实现正常的业务逻辑。

(1)ReplicaManager(副本管理模块):负责接收Controller的Command以完成Replica的管理工作,Command主要有两种LeaderAndISRCommand和StopReplicaCommand,主要完成三件事:1)接受LeaderAndISRCommand命令 2)接受StopReplicaCommand命令 3)开启定时线程maybeShrinkIsr发现那些已经没有进行同步的复本;

(2)LogManager(日志管理模块):Partition在存储层面都是Log文件,每个Log由多个LogSegment组成,每个LogSegment以本LogSegment的第一条为索引进行Segment的管理;

(3)OffsetManager(偏移量管理模块):提供对Offset的保存和读取,Kafka的Topic的偏移量有2种方式:1)由Zookeeper统一维护;2)Kafka内部的Offsets.storage参数保存。OffestsCache的更新机制分3种情况:1)produceRequest.requiredAcks == 0时,即不需要ack,则立刻调用putOffsets更新偏移量;2)produceRequest.requiredAcks == 1时,即需要立即返回response时,则立刻调用putOffsets更新偏移量;3)produceRequest.requiredAcks == -1时,即只有此批消息达到最小副本数的时候,通过ProducerRequestPurgatory
触发调用putOffsets更新偏移量;

4、Controller(集群状态控制层)

与Zookeeper对接,进行Leader的选举,Leader负责Topic的创建与删除、Topic的分区变化、Topic分区内部的副本变化、Broker的热备份。




参考资料:

1、《Learning Apache Kafka, 2nd Edition》

2、http://blog.csdn.net/wl044090432/article/category/6123025/2

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇Kafka介绍, kafka主题的副本机制 下一篇Kafka 的配置及应用

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目