![](https://img-blog.csdnimg.cn/20201014180756916.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Kafka
文章平均质量分 65
赵银龙
这个作者很懒,什么都没留下…
展开
-
Kafka源码之KafkaConsumer分析之ConsumerNetworkClient
我们先来看一下KafkaConsumer几个核心的方法:subscribe:订阅指定的Topic,并为消费者消费者自动分配分区assign:用户手动指定的Topic,并且指定消费的分区。commit:提交消费者已经完成的offsetseek:指定消费者起始消费的位置poll:负责从服务端获取消息pause/resume:暂停/继续Consumer在之前我们介绍了NetworkClie...原创 2018-10-28 12:33:05 · 1068 阅读 · 0 评论 -
Kafka源码之RecordAccumulator分析
上一篇文章介绍过KafkaProduer可以有同步和异步两种方式发送消息,其实两者的底层实现相同,都是通过异步方式实现的。主线程调用send方法发送消息的时候,先将消息放大RecordAccumulator中暂存,然后主线程就可以返回了,这个时候消息并没有真正的发送给Kafka,而是换存在了RecordAccumulator中,之后,主线程通过send方法不断的向RecordAccumulator...原创 2018-10-27 12:02:44 · 1088 阅读 · 0 评论 -
Kafka源码之KafkaProducer分析
我们先通过一张图来了解一下KafkaProducer发送消息的整个流程:1、ProducerInterceptors对消息进行拦截。2、Serializer对消息的key和value进行序列化3、Partitioner为消息选择合适的Partition4、RecordAccumulator收集消息,实现批量发送5、Sender从RecordAccumulator获取消息6、构造Cli...原创 2018-10-26 21:52:03 · 1017 阅读 · 1 评论 -
Kafka源码之服务端分析之DelayedOperaionPurgatory组件
DelayedOperaionPurgatory是一个相对独立的组件,它的主要功能是管理延迟操作。TimingWheel我们先来看一下它的核心字段:bukets:其中的每一项都对应这一个时间格,同一个TimerTaskList中过的不同的定时任务的到期时间可能不同,但是相差在一个时间个的范围内tickMs:当前时间轮中一个时间格表示的时间跨度wheelSize:当前时间轮的格数,也是bu...原创 2018-10-29 19:19:36 · 313 阅读 · 0 评论 -
Kafka源码之服务端分析之API层
Handler线程属于Kafka的API层,Handler线程对请求的处理通过调用KafkaApis中的方法实现。KafkaRequestHandler的主要职责是从RequestChannel获取请求并调用KafkaApis的handler方法处理请求:def run() { while(true) { try { var req : RequestCha...原创 2018-10-29 14:43:34 · 304 阅读 · 0 评论 -
Kafka源码之服务端分析之SocketServer
前面我们介绍了消费者和生产者,从这篇文章开始我们来看一下它的服务端的设计。Kafka的网络层是采用多线程,多个Selector的设计实现的。核心类是SocketServer,其中包含一个Acceptor 用于接收并处理所有的新连接,每个Acceptor对应多个Processor线程,每个Processor线程拥有自己的Selector,主要用于从连接中读取请求和写回响应。每个Acceptor对应...原创 2018-10-29 14:21:26 · 376 阅读 · 0 评论 -
Kafka源码之KafkaConsumer分析之poll方法分析
我们获取消息都是通过poll方法,现在我们从整体上看一下消费的流程:public ConsumerRecords<K, V> poll(long timeout) { //防止并发操作 acquire(); try { if (timeout < 0) throw new Illegal...原创 2018-10-28 20:58:42 · 28412 阅读 · 6 评论 -
Kafka源码之KafkaConsumer分析之Fetcher
对于KafkaConsumer,我们最后来看一下消费者是符合从服务端获取消息的,它是用Fetcher来实现此功能。Fetcher的主要工作就是发送FetchRequest请求,获取指定的消息集合,处理FetchResponse,更新消费位置。我们先来看一下它的核心字段:client:负责网络通信minBytes:在服务端收到FetchRequest之后并不是立即响应,而是当可返回的消息数据积...原创 2018-10-28 20:50:07 · 1386 阅读 · 0 评论 -
Kafka源码之KafkaConsumer分析之offset操作
当消费者正常消费过程中以及Rebalance操作开始之前,都会提交一次Offset记录Consumer当前的消费位置。在SubscriptionState中使用TopicPartitionState记录了每个TopicPartition的消费状况,TopicPartitionState.position字段则记录了消费者下次要从服务端获取的消息的offset。public void commit...原创 2018-10-28 19:40:44 · 2899 阅读 · 0 评论 -
Kafka源码之KafkaConsumer分析之Rebalance
我们先来看一下哪些情况会发生Rebalance操作:1、有新的消费者加入ConsumerGroup2、有消费者宕机下线。3、有消费者主动退出Consumer Group4、Consumer Group订阅的任一Topic出现分区数量的变化5、消费者调用unsubscribe取消对某Topic的订阅下面对Reblance操作的具体实现进行分析第一阶段Rebalance操作的第一步就是...原创 2018-10-28 19:03:03 · 1190 阅读 · 0 评论 -
Kafka源码之Sender分析
我们先来介绍一下Sender发送消息的整个流程:首先根据RecordAccumulator的缓存情况,利用ready筛选出可以向哪些节点发送消息,然后根据生产者和各个节点的连接爱你概况,过滤Node节点,之后,生成相应的请求,这里要特别注意的是每个Node节点只生成一个请求,最后,调用NetWorkClient将请求发送出去。1、从Metadata获取Kafka集群元数据2、调用Record...原创 2018-10-27 16:05:26 · 1333 阅读 · 2 评论