码上见高低
码龄7年
关注
提问 私信
  • 博客:166,920
    166,920
    总访问量
  • 75
    原创
  • 1,407,090
    排名
  • 54
    粉丝
  • 0
    铁粉

个人简介:纸上得来终觉浅,绝知此事要躬行

IP属地以运营商信息为准,境内显示到省(区、市),境外显示到国家(地区)
IP 属地:四川省
  • 加入CSDN时间: 2017-08-19
博客简介:

码上学习

博客描述:
纸上得来终觉浅,绝知此事要躬行
查看详细资料
个人成就
  • 获得61次点赞
  • 内容获得22次评论
  • 获得117次收藏
创作历程
  • 23篇
    2019年
  • 32篇
    2018年
  • 21篇
    2017年
成就勋章
TA的专栏
  • 国产化信创替代
  • Kubernates
  • Apache Tomcat
  • kafka2.0 源码分析
    22篇
  • apache dubbo
  • Seata
  • Oracle
    2篇
  • MySQL
  • Mybatis
    7篇
  • Struts2
    6篇
  • SpringMVC
    5篇
  • javaSE
    3篇
  • 其他
    8篇
  • javaWeb
  • lucene /slor
    16篇
  • 易语言
    1篇
  • springboot
  • Go语言
  • Dubbo
  • 区块链
  • Netty
    1篇
  • 多线程
    4篇
  • Kafka
    22篇
创作活动更多

超级创作者激励计划

万元现金补贴,高额收益分成,专属VIP内容创作者流量扶持,等你加入!

去参加
  • 最近
  • 文章
  • 代码仓
  • 资源
  • 问答
  • 帖子
  • 视频
  • 课程
  • 关注/订阅/互动
  • 收藏
搜TA的内容
搜索 取消

【配置篇】kafka生产者配置详细分析[全网最详细,最深度分析。持续补充中.....]

metadata.max.age.ms: metadata有效期毫秒值,默认值5分钟。metadata就是客户端保存的服务器信息。过期后会自动更新。
原创
发布博客 2019.07.28 ·
2230 阅读 ·
1 点赞 ·
0 评论 ·
3 收藏

【配置篇】生产者配置总览[持续补充中..]

Producer实例化是初始化了60多项生产者配置项。这里整理的配置都是从源码中整理的。持续补充中…配置项描述缺省值作用bootstrap.serversKafka服务器地址列表,host1:port1,host2:port2格式配置metadata.max.age.ms元数据有效期毫秒值5601000(5分钟)更新本地缓存的的Kafka集群数据b...
原创
发布博客 2019.07.28 ·
584 阅读 ·
1 点赞 ·
0 评论 ·
0 收藏

【网络核心层篇】-KafkaChannel-网络读写底层实现

1.KafkaChannel简述KafkaChannel是对SocketChannel的封装,是Kafka中负责网络读写的最底层类。封装了SocketChannel,还封装了Kafka自己的认证器Authenticator。屏蔽Kafka的上层逻辑,来看KafkaChannel是如何设计的。KafkaChannel网络读写模型:Kafka-client是nio selector模型的网络通...
原创
发布博客 2019.07.28 ·
1453 阅读 ·
1 点赞 ·
1 评论 ·
2 收藏

【数据结构篇】请求队列InFlightRequest

1.请求队列简单介绍:InFlightRequest是client的请求队列。max.in.flight.requests.per.connection配置请求队列大小,默认5,请求队列中存放的是在发送途中的请求,包括:正在发送的请求和已经发送的但还没有接收到response的请求;请求队列满了,发送消息将会发生阻塞。也就是发往同一个node的最大未响应请求数。具体实现是:sender线程在...
原创
发布博客 2019.07.21 ·
3904 阅读 ·
0 点赞 ·
0 评论 ·
2 收藏

【网络核心层篇】NetworkClient—检查连接

Sender 线程在发送消息的的sendProducerData()方法中,会对Kafka的的每个node 进行检测是否可以发送消息,将没有就绪的node节点移除,这个时候就会调用NetworkClient的ready方法对指定的node 进行检测。1.流程图:2.源码分析:1.检测node的连接状态是否就绪可用则为true,不可用则返回false,并会初始化一个连接/** * Be...
原创
发布博客 2019.07.20 ·
1390 阅读 ·
0 点赞 ·
0 评论 ·
1 收藏

【网络核心层篇】NetworkClient—初始化连接

initiateConnect方法虽然初始化了一个连接,也执行了 doConnect(socketChannel, address);方法,但是在 设置成了非阻塞I/O模式 见3, channel.connect(address);会立即返回。所以initiateConnect方法执行结束,并不代表真正的一个连接,建立,后面会在网络读写的poll方法中对连接进行检查,channel.finis...
原创
发布博客 2019.07.20 ·
1938 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

【生产者篇】 sender线程源码分析--1

主要内容:sender线程简单介绍sender线程的初始化和开启时机初始化源码分析开启时机和运行方式源码分析总结run方法执行流程分析run方法源码Sender线程run方法图解细节补充说明1.sender线程简单介绍sender线程就是调用RecordAccumulator的api从RecordAccumulator中取出内容,请求kafka获取可用...
原创
发布博客 2019.07.20 ·
1086 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

【生产者篇】 producer发送消息-追加到缓存分析

经过序列化,计算分区号之后KafkaProducer主线程调用RecordAccumulator的append方法将消息追加到缓存。并唤醒sender线程处理。流程参照博客:send方法中更新元数据源码分析KafkaProducer发送消息简要流程这里sender.wakeup()方法就是最终调用了nioSelector的wakeup方法,selector监听channel事件,会发送阻塞。...
原创
发布博客 2019.07.14 ·
1988 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

【生产者篇】 自定义拦截器

根据send方法的源码知道,消息先进入拦截器,这里的拦截器,跟web拦截器一样,在拦截器中可以进行逻辑判断处理,可以对消息进行再次,或者统一的包装处理。也可以做一些公共行为逻辑实现:比如:1:统计消息次数,成功次数,失败次数:2:可以实现消息的统一落地(如果需要);3:可以实现类似的aop日志,成功日志,错误日志。自定义拦截器使用步骤:1: 实现ProducerInterceptor...
原创
发布博客 2019.07.11 ·
1145 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

【生产者篇】 send方法中更新元数据源码分析

在send方法中需要获取Cluster信息,然后计算分区的时候,如果消息没有指定分区,那么就会使用到Cluster信息用于计算分区号。所以在计算分区号之前,需要获取最新的Cluster数据但是更新元数据的具体不在这里,准确的应该叫等待元数据更新。为什么是等待呢?看源码send方法源码://....省略无关代码 //等待元数据更新:[2.1]clusterAndWaitTime = wa...
原创
发布博客 2019.07.11 ·
1393 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

【生产者篇】发送消息send方法源码解读

关于更新元数据waitOnMetadata和追加消息到缓存由于内容很多。waitOnMetadata见下篇分析,RecordAccumulator会有专题分析数据结构和存取过程@Overridepublic Future<RecordMetadata> send(ProducerRecord<K, V> record, Callback callback) { ...
原创
发布博客 2019.07.11 ·
2185 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

【生产者篇】拦截器源码分析

生产者拦截器可以对消息进行预处理。分析下KafkaProducer的拦截器相关源码1、拦截消息的地方调用KafkaProduer的send方法时候第一步就是拦截器对消息进行处理:public Future<RecordMetadata> send(ProducerRecord<K, V> record, Callback callback) { //拦截器处理...
原创
发布博客 2019.07.10 ·
1931 阅读 ·
0 点赞 ·
0 评论 ·
2 收藏

【生产者篇】 KafkaProducer发送消息简要流程

Kafka的Producer客户端就是完成将消息发送到Kafka服务器。完成这个功能只需要使用KafkaProducer的send方法即可。其内部原理是由两个线程共同完成,主线程和sender线程。sender线程是主线程的守护线程。主线程负责创建消对象,并将消息放在缓存,sender线程从缓存取出消息然后进行网络发送。简要流程分析:主线程:1、封装消息对象,ProducerRecord,...
原创
发布博客 2019.07.10 ·
2921 阅读 ·
2 点赞 ·
0 评论 ·
4 收藏

7-2 序列化集成ptotobuf

protostuff基于protobuf的序列化/反序列化,不需要编写.proto文件,方便使用。针对kryo的序列化demo,使用protostuff。在producer和consumer的配置中分别配置自定义的ProtostuffSerializer和ProtostuffDerializer即可注意使用protostuff序列化需要注意,序列化和反序列化的字段顺序问题。1、引入依赖&l...
原创
发布博客 2019.07.09 ·
1468 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

7-1 序列化集成 Kryo

1、为什么使用二进制编码kafka中提供了很多内置列化器,但是在生产中我们的消息对象或者格式更为复杂,这个时候我们可以采取将消息的java对象转成json字符串,这样producer使用StringSerializer进行序列化,consumer使用StringDeserializer然后再将json转成对象,使用json有很多好处,方便操作,还有就是跨语言也方便,但是缺点就是性能太低,码流太...
原创
发布博客 2019.07.09 ·
1657 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

【生产者篇】Serializer分析和源码解读.md

1、序列化作用序列化主要是用来解决数据在网络中传输的问题. 在网络中传输的数据必须全是字节。生产者需要用序列化器( Serializer )把对象转换成字节数组才能通过网络发送给Kafka ,消费者需要用反序列化器( Deserializer )把从Kafka 中收到的字节数组转换成相应的对象。在入门demo中使用的是org. apache.kafka. common. serializat...
原创
发布博客 2019.07.07 ·
2117 阅读 ·
0 点赞 ·
0 评论 ·
1 收藏

写在之前

Kafka是一个优秀的发布订阅消息系统,因其高吞吐量特点被广泛运用,所以有必要对其进行研究学习。选用的版本是Kafka2.0,我对kafka运用经验不足,工程经验欠缺。所以学习kafka,对学习过程做一些总结贴出来,一方面给学习的胖友一个参考,另一方面也受着广大胖友的检验。同步GitHub地址kafka-clients-2.0.0源码注释,如果对你有帮助希望给个star。博客中发现问题可立即指...
原创
发布博客 2019.07.06 ·
1168 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

【生产者篇】 初始化分区器和DefaultPartitioner分区实现分析

一、分区器的初始化时机1、在KafkaProducer获取分区器, /** * 读取使用的分区器 * 分区器配置名properties.put("partitioner.class" ,"全类名") * 如果配置了将会使用用户自定义的分区器,如果用户没有自定义分区器,这里将会使用 ...
原创
发布博客 2019.07.06 ·
2335 阅读 ·
1 点赞 ·
0 评论 ·
2 收藏

【生产者篇】 KafkaProducer实例化-核心构造方法

KafkaProducer的实例化最终都是由核心构造方法实现的。kafka的producer分为主线程和sender线程,主线程负责将消息放到缓存中,sender线程以守护线程方式运行轮询缓存进行发送消息。在KafkaProducer实例化的同时,需要实例化缓存队列RecordAccumulator,缓存队列就是主线程存放消息的。并开启sender线程,初始化Kafkaclient,就是为网...
原创
发布博客 2019.07.06 ·
2158 阅读 ·
0 点赞 ·
0 评论 ·
1 收藏

【生产者篇】 KafkaProducer实例化-初始化配置

1、KafkaProducer构造方法使用KafkaProducer的api之前需要得到一个KafkaProducer实例,梳理KafkaProducer的构造函数:KafkaProducer一共五个构造器://核心构造器 KafkaProducer(ProducerConfig config, Serializer<K> keySer...
原创
发布博客 2019.07.06 ·
4075 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏
加载更多