kafka
kafka技术,源码等
strong_yu
这个作者很懒,什么都没留下…
展开
-
kafka源码7-生产者对异常的处理
之前我们分析的都是消息正常发出和收到响应,现在分析一下对应异常消息的处理 Producer对请求超市的处理 在Sender的run方法中,有专门检测超时的请求 public class Sender implements Runnable { void run(long now) { /** * 建立网络连接,发送数据 */ client.poll(pollTimeout, now); } } public L原创 2020-12-03 11:22:28 · 1321 阅读 · 0 评论 -
kafka源码6-Sender线程对Broker响应的处理
生产者处理响应 前面我们分析了producer发送请求的过程,现在分析发送请求后,怎么处理响应的,producer的响应处理也是在Sender线程中处理的,再看Selector的pollSelectionKeys方法 class Selector{ void pollSelectionKeys(Set<SelectionKey> selectionKeys, boolean isImmediatelyConnected,原创 2020-12-01 14:05:41 · 127 阅读 · 0 评论 -
kafka源码5-Sender线程发送数据
前面已经分析到数据封装成了batch,现在就是要发送数据,kafka生产者发送数据是通过Sender线程来发送,在分析Producer初始化的时候看到,Sender线程是在Producer初始化的时候就启动了 Sender线程发送流程 看run方法做了什么操作 void run(long now) { if (transactionManager != null) { try { if (transactionManager.sh原创 2020-12-01 11:40:56 · 300 阅读 · 0 评论 -
kafka源码4-消息封装RecordAccumulator
kafka发送的消息是封装成批次发送的,这些操作都是在RecordAccumulator对象中操作的,下图是RecordAccumulator中的对象对应关系 首先看一下RecordAccumulator中的一些对应关系,生产者发送数据是分装在ProducerBatch中的,每个Partition对应一个Dequeue队列,这些队列组成批次batches,BufferPool是一个内存池,ProducerBatch对象的内存就是在内存池中申请的 封装批次流程 public RecordAppendResu原创 2020-11-25 18:27:13 · 143 阅读 · 0 评论 -
kafka源码3-分区器
之前我们知道,生产者在拿到topic的元数据信息后,就是分区,分区主要是看生产者是按照什么策略来分区的 public class KafkaProducer<K, V> implements Producer<K, V> { private int partition(ProducerRecord<K, V> record, byte[] serializedKey, byte[] serializedValue, Cluster cluster) { /原创 2020-11-24 11:44:50 · 115 阅读 · 0 评论 -
kafka源码2-元数据
从前面我们看到,生产者在发送数据时,首先是更新元数据,这次分析一下更新元数据的流程 ,首先生产者是怎么保存元数据的 元数据结构 Metadata对象 public final class Metadata implements Closeable { private static final Logger log = LoggerFactory.getLogger(Metadata.class); public static final long TOPIC_EXPIRY_MS = 5 * 60 * 1原创 2020-11-23 21:35:50 · 922 阅读 · 0 评论 -
kafka源码1-生产者流程
生产者初始化 生产者在发送数据时,首先要创建KafkaProducer对象,我们看该对象做了什么 KafkaProducer(ProducerConfig config, Serializer<K> keySerializer, Serializer<V> valueSerializer, Metadata metadata, KafkaCl原创 2020-11-19 18:54:08 · 122 阅读 · 0 评论