
kafka
bohu83
微信:bohu83
展开
-
《Apache kafka实战》读书笔记-1 kafka简介
一 序 过了一个春节假期,好久没看书了,决定翻翻kafka的书,之前项目作为消费者使用过,脑子有印象的就是其消费者与生产者。然其底层的存储机制,选举机制,备份机制等实现细节,需要对其源码进行学习。知其所以然是为了更好的使用。关于kafka的资料很多,官网是首选,还是先看本书再看下代码,《kafka权威指南》偏理论,这本《Apache kafka实战》更适合。二 背景 K...原创 2019-02-19 00:11:10 · 350 阅读 · 0 评论 -
《kafka producer学习笔记9》-NetworkClient
一InFlightRequests 上一篇我们整理了《kafka producer学习笔记8》-NIO,本篇其实对于producer而言,所剩不多了,主要就是networkclient了。有必要先补充下InFlightRequests,InFlightRequests队列的作用是缓存已经发出去但没有收到响应的ClientRequest。其底层是通过一个Map<String,Dequ...原创 2019-03-31 00:01:55 · 1724 阅读 · 0 评论 -
《kafka producer 学习笔记5》RecordAccumulator(2)
一BufferPool 上一篇已经整理了ProducerBatch,本文继续看BufferPool。ByteBuffer的创建和释放时比较消耗资源的,池化的目的是降低创建和销毁时间,提升执行效率,即将原来的创建和销毁时间降为从池中获取和归还入池的时间。为了实现内存的高效利用,Kafka客户端使用BufferPool来实现ByteBuffer的复用。在package org.apache.k...原创 2019-03-07 19:53:01 · 467 阅读 · 0 评论 -
《kafka producer学习笔记7》-sender1
一 序通过上一篇的分析《RecordAccumulator(3)》我们知道,主线程通过KafkaProducer.send()方法将消息放入RecordAccumulator中缓存,并没有实际的网络I/O操作。网络操作是由Sender统一进行的。sender发消息的大概流程。用RecordAccumulator.ready()方法,根据RecordAccumulator的缓存情况,筛选...原创 2019-03-15 00:38:26 · 987 阅读 · 0 评论 -
《kafka producer 学习笔记4》-RecordAccumulator
一 序 这两天看这块代码看的头大,比之前预想的要复杂。回头一想这也可理解,因为又要高性能设计,还是线程安全的。很值得看看。接着前面的send()方法,在消息选择完分区之后,就是往暂存到RecordAccumulator队列中。然后主线程就可以从send()方法返回了。其实这时候消息没有真正的发送给kafka,之后业务线程通过KafkaProducer.send()方法不断向Recor...原创 2019-03-06 22:01:08 · 747 阅读 · 0 评论 -
《kafka producer 学习笔记6》RecordAccumulator(3)
一RecordAccumulator分析完MemoryRecords,ProducerBatch以及BufferPool,再来看RecordAccumulator:1.1 字段/** * This class acts as a queue that accumulates records into {@link MemoryRecords} * instances to be...原创 2019-03-08 23:45:32 · 1152 阅读 · 0 评论 -
kafka producer 学习笔记3 partitioner
一partioner还是沿着send去看,其中本篇partioner会简单介绍,下一篇重点整理RecordAccumulator。 byte[] serializedKey; try {//序列化key serializedKey = keySerializer.serialize(record.topic(), record....原创 2019-03-06 15:35:58 · 382 阅读 · 0 评论 -
kafka源码阅读环境准备
首先感谢@王小日 提供的书《Apache kafka 源码剖析》。参照本书的第一章,先进行环境搭建。一 依赖:jdk:1.8gradle:https://services.gradle.org/distributions/gradle-5.2.1-all.zipscala:https://downloads.lightbend.com/scala/2.12.8/scala-...原创 2019-02-27 09:49:34 · 668 阅读 · 0 评论 -
kafka producer 学习笔记2-集群元数据metadata更新
一 序 上一篇在介绍producer的核心方法dosend ,send除了拦截器外,第一步就是要获取集群信息, clusterAndWaitTime = waitOnMetadata(record.topic(), record.partition(), maxBlockTimeMs); 因为dosend本身流程较长,所以本篇主要围绕kafka的集群元数据...原创 2019-03-03 11:20:20 · 11824 阅读 · 0 评论 -
《Apache kafka实战》-读书笔记2 kafka新版本功能与集群规划
一 新版本功能简介 书上第2章是介绍了kafka的版本历史。Kafka 的服务器端代码是由 Scala 语言编写的,而新版本客户端代码是由 Java语言编写的 .(书上指0.9.0版本),当然目前最新的版本是2.1.0. 版本演进的很快,大版本从0.11.0、1.0.0、1.1.0到2.0.从最初的标准消息系统,到现如今成为一个完整的包括导入导出和处理的流数据平台。功能越发完善,新功能...原创 2019-02-19 23:38:23 · 404 阅读 · 0 评论 -
kafka producer 源码学习1
一 producer的原理 上一篇《kafka新版本功能》已经有关于producer的简介了。本篇就从producer的源码开始看。大概思路是以发送的方法send为主线,去梳理整个过程。1.1 ProducerIntercptor对消息进行拦截1.2 Serialzer对key和value进行序列化1.3 Partitioner对消息选择合适的分区1.4 RecordA...原创 2019-03-01 00:03:13 · 668 阅读 · 0 评论 -
《kafka producer学习笔记8》-NIO
一 序 首先感谢王昊@二代的书,他要去阿里了,祝他早日大富大贵。回到正题,kafka关于NIO这一块的代码,我大概断断续续看了几天,觉得还是看起来吃力,主要是NIO这块底层的都忘了,所以一般都使用像netty的框架屏蔽底层的细节,让上层业务只需要监听端口,建立连接、接受请求、处理请求、写返回就可以了。kafka为啥没用现成的netty而是自己封装接口呢?网上看了段介绍:Perform...原创 2019-03-27 23:51:40 · 1034 阅读 · 0 评论