- 博客(10)
- 资源 (1)
- 收藏
- 关注
原创 《kafka producer学习笔记9》-NetworkClient
一InFlightRequests 上一篇我们整理了《kafka producer学习笔记8》-NIO,本篇其实对于producer而言,所剩不多了,主要就是networkclient了。有必要先补充下InFlightRequests,InFlightRequests队列的作用是缓存已经发出去但没有收到响应的ClientRequest。其底层是通过一个Map<String,Dequ...
2019-03-31 00:01:55 1508
原创 《kafka producer学习笔记8》-NIO
一 序 首先感谢王昊@二代的书,他要去阿里了,祝他早日大富大贵。回到正题,kafka关于NIO这一块的代码,我大概断断续续看了几天,觉得还是看起来吃力,主要是NIO这块底层的都忘了,所以一般都使用像netty的框架屏蔽底层的细节,让上层业务只需要监听端口,建立连接、接受请求、处理请求、写返回就可以了。kafka为啥没用现成的netty而是自己封装接口呢?网上看了段介绍:Perform...
2019-03-27 23:51:40 897
原创 一种第N个红包最大实现的方式
一 序 需求背景:常叫外面的同学对于美团或者饿了么的那种在微信群里分享的,第N个红包最大的领红包的营销模式很熟悉了。我们有类似的需求,其实N是后台可以配置的。营销规则有: 预算金额,有个范围。 第N个最大,N的范围配置。 最大金额:有个配置范围。 ...
2019-03-18 18:58:42 524
原创 《kafka producer学习笔记7》-sender1
一 序通过上一篇的分析《RecordAccumulator(3)》我们知道,主线程通过KafkaProducer.send()方法将消息放入RecordAccumulator中缓存,并没有实际的网络I/O操作。网络操作是由Sender统一进行的。sender发消息的大概流程。用RecordAccumulator.ready()方法,根据RecordAccumulator的缓存情况,筛选...
2019-03-15 00:38:26 827
原创 《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 985
原创 《kafka producer 学习笔记5》RecordAccumulator(2)
一BufferPool 上一篇已经整理了ProducerBatch,本文继续看BufferPool。ByteBuffer的创建和释放时比较消耗资源的,池化的目的是降低创建和销毁时间,提升执行效率,即将原来的创建和销毁时间降为从池中获取和归还入池的时间。为了实现内存的高效利用,Kafka客户端使用BufferPool来实现ByteBuffer的复用。在package org.apache.k...
2019-03-07 19:53:01 398
原创 《kafka producer 学习笔记4》-RecordAccumulator
一 序 这两天看这块代码看的头大,比之前预想的要复杂。回头一想这也可理解,因为又要高性能设计,还是线程安全的。很值得看看。接着前面的send()方法,在消息选择完分区之后,就是往暂存到RecordAccumulator队列中。然后主线程就可以从send()方法返回了。其实这时候消息没有真正的发送给kafka,之后业务线程通过KafkaProducer.send()方法不断向Recor...
2019-03-06 22:01:08 652
原创 kafka producer 学习笔记3 partitioner
一partioner还是沿着send去看,其中本篇partioner会简单介绍,下一篇重点整理RecordAccumulator。 byte[] serializedKey; try {//序列化key serializedKey = keySerializer.serialize(record.topic(), record....
2019-03-06 15:35:58 336
原创 kafka producer 学习笔记2-集群元数据metadata更新
一 序 上一篇在介绍producer的核心方法dosend ,send除了拦截器外,第一步就是要获取集群信息, clusterAndWaitTime = waitOnMetadata(record.topic(), record.partition(), maxBlockTimeMs); 因为dosend本身流程较长,所以本篇主要围绕kafka的集群元数据...
2019-03-03 11:20:20 11474
原创 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 561
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人