自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

码上学习

纸上得来终觉浅,绝知此事要躬行

  • 博客(76)
  • 资源 (3)
  • 收藏
  • 关注

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

metadata.max.age.ms: metadata有效期毫秒值,默认值5分钟。metadata就是客户端保存的服务器信息。过期后会自动更新。

2019-07-28 23:37:00 2120

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

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

2019-07-28 17:02:41 550

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

1.KafkaChannel简述KafkaChannel是对SocketChannel的封装,是Kafka中负责网络读写的最底层类。封装了SocketChannel,还封装了Kafka自己的认证器Authenticator。屏蔽Kafka的上层逻辑,来看KafkaChannel是如何设计的。KafkaChannel网络读写模型:Kafka-client是nio selector模型的网络通...

2019-07-28 01:05:54 1310 1

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

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

2019-07-21 00:51:24 3652

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

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

2019-07-20 19:40:25 1327

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

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

2019-07-20 19:32:32 1852

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

主要内容:sender线程简单介绍sender线程的初始化和开启时机初始化源码分析开启时机和运行方式源码分析总结run方法执行流程分析run方法源码Sender线程run方法图解细节补充说明1.sender线程简单介绍sender线程就是调用RecordAccumulator的api从RecordAccumulator中取出内容,请求kafka获取可用...

2019-07-20 19:14:02 1017

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

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

2019-07-14 23:20:37 1926

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

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

2019-07-11 12:36:43 1109

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

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

2019-07-11 11:39:48 1212

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

关于更新元数据waitOnMetadata和追加消息到缓存由于内容很多。waitOnMetadata见下篇分析,RecordAccumulator会有专题分析数据结构和存取过程@Overridepublic Future<RecordMetadata> send(ProducerRecord<K, V> record, Callback callback) { ...

2019-07-11 09:43:52 2022

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

生产者拦截器可以对消息进行预处理。分析下KafkaProducer的拦截器相关源码1、拦截消息的地方调用KafkaProduer的send方法时候第一步就是拦截器对消息进行处理:public Future<RecordMetadata> send(ProducerRecord<K, V> record, Callback callback) { //拦截器处理...

2019-07-10 14:24:04 1898

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

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

2019-07-10 14:23:07 2862

原创 7-2 序列化集成ptotobuf

protostuff基于protobuf的序列化/反序列化,不需要编写.proto文件,方便使用。针对kryo的序列化demo,使用protostuff。在producer和consumer的配置中分别配置自定义的ProtostuffSerializer和ProtostuffDerializer即可注意使用protostuff序列化需要注意,序列化和反序列化的字段顺序问题。1、引入依赖&l...

2019-07-09 12:33:53 1435

原创 7-1 序列化集成 Kryo

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

2019-07-09 12:21:01 1562

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

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

2019-07-07 18:07:43 2055

原创 写在之前

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

2019-07-06 23:09:38 1137

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

一、分区器的初始化时机1、在KafkaProducer获取分区器, /** * 读取使用的分区器 * 分区器配置名properties.put("partitioner.class" ,"全类名") * 如果配置了将会使用用户自定义的分区器,如果用户没有自定义分区器,这里将会使用 ...

2019-07-06 23:09:30 2279

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

KafkaProducer的实例化最终都是由核心构造方法实现的。kafka的producer分为主线程和sender线程,主线程负责将消息放到缓存中,sender线程以守护线程方式运行轮询缓存进行发送消息。在KafkaProducer实例化的同时,需要实例化缓存队列RecordAccumulator,缓存队列就是主线程存放消息的。并开启sender线程,初始化Kafkaclient,就是为网...

2019-07-06 23:09:20 2093

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

1、KafkaProducer构造方法使用KafkaProducer的api之前需要得到一个KafkaProducer实例,梳理KafkaProducer的构造函数:KafkaProducer一共五个构造器://核心构造器 KafkaProducer(ProducerConfig config, Serializer<K> keySer...

2019-07-06 23:09:11 3951

原创 【生产者篇】 KafkaProducer初探

producer包结构internals下面放的就是kafka内部使用的,下面的这些类就是跟api有关的。从上到下:BufferExhaustedException:buffer耗尽时候抛出的异常,关于kafka中异常处理和异常体系后面会单独分析。Callback:回调函数接口KafkaProducer :Produce实现类MockProducer:Produce实现类,mock数...

2019-07-06 23:09:01 1685

原创 1 入门demo

官方入门demopublic static void main(String[] args) { String url = "ip:9092"; String topic = "quick_start"; Properties properties = new Properties(); properties.put("key.deserializer", "or...

2019-07-06 23:08:52 1097

原创 扫码登录解决方案

2019-02-18 14:38:50 2365

原创 volatile的使用优化

在jdk7 之后,由于重排序因素,使用该方法作用失效,仅作知识原理学习著名的Java并发编程大师Doug lea在JDK 7的并发包里新增一个队列集合类LinkedTransferQueue,它在使用volatile变量时,用一种追加字节的方式来优化队列出队和入队的性能。LinkedTransferQueue的代码如下:/** 队列中的头部节点 */private transient fin...

2018-10-22 15:49:19 888

原创 volatile实现内存可见性分析:字节码版本

声明一个volatile变量,并赋值public class VolatileTest { static volatile int i; public static void main(String[] args){ i = 10; }}看看加了volatile之后,编译出来的字节码有什么不同,执行 javap -verbose Volatile...

2018-10-22 15:38:50 2128

原创 CPU指令重排与缓存一致性

程序中CPU计算+与内存交互(读取,赋值),CPU计算速度远远高于与内存交互的速度(好比内存与查数据库)引入缓存提高速度,缓存一致性是保证数据准确性的硬件协议。指令重排无法逾越内存屏障。缓存一致性的实现,先看看x86的cpu缓存结构。1、各种寄存器,用来存储本地变量和函数参数,访问一次需要1cycle,耗时小于1ns;2、L1 Cache,一级缓存,本地core的缓存,分成32K的数据缓存...

2018-10-22 15:08:32 2615

转载 volatile变量内存可见性的原理分析—汇编指令分析

在java虚拟机的内存模型中,有主内存和工作内存的概念,每个线程对应一个工作内存,并共享主内存的数据,下面看看操作普通变量和volatile变量有什么不同:1、对于普通变量:读操作会优先读取工作内存的数据,如果工作内存中不存在,则从主内存中拷贝一份数据到工作内存中;写操作只会修改工作内存的副本数据,这种情况下,其它线程就无法读取变量的最新值。2、对于volatile变量,读操作时JMM会把工作...

2018-10-22 14:52:31 1068 3

原创 eclipse中 项目打包到maven仓库操作简单操作方法(非maven指令)

1.选中项目import2.点击next点击finish,仓库查看

2018-09-28 13:08:03 1225

原创 Jmeter 4.0 汉化,

在bin目录下面的jmeter.properties  更改这句配置,jemter就自动汉化,

2018-07-31 11:25:49 403

原创 无法获得 VMCI 驱动程序的版本: 句柄无效。 驱动程序“vmci.sys”的版本不正确。请尝试重新安装 VMware Workstation。 开启模块 DevicePowerOn 的操作失败

错误:无法获得 VMCI 驱动程序的版本: 句柄无效。  驱动程序“vmci.sys”的版本不正确。请尝试重新安装 VMware Workstation。  开启模块 DevicePowerOn 的操作失败找到虚拟机配置文件的地方:记事本打开:vmci0.present = "true"  改成vmci0.present = "false"重新启动虚拟机 ...

2018-07-24 10:06:36 12799 5

原创 Netty第二篇——Netty入门代码服务端代码解释

入门代码四块:服务端,服务端的handler,客户端,客户端的handler。服务端和客户端建立连接后,读写数据是handler完成。理解成业务层分离。服务端代码:创建两个线程组 NioEventLoopGroup work = new NioEventLoopGroup(); NioEventLoopGroup boss = new NioEventLoopGroup();这两个线...

2018-06-11 19:10:59 677

原创 eclipse 创建springboot 提示socketexcetion问题

问题:使用eclipse 创建spring starter projecct 时候提示无连接,访问 Eclipse Marketplace 也提示:连接失败 处理方法:修改eclipse.ini文件,在文件末尾添加如下内容:-Djava.net.preferIPv4Stack=true...

2018-06-06 13:44:32 1834 2

原创 SpringMVC第十篇——拦截器的配置和使用

Springmvc的配置文件中配置: <!-- SPringmvc的拦截器链--> <mvc:interceptors> <!-- 多个拦截器 --> <mvc:interceptor> <!-- 拦截所有 --> <mvc:mapping path="/**"/>

2018-03-15 13:08:41 383

原创 SpringMVC第九篇——使用集合接收参数(批量提交)

填入数据,批量更新;提交的表单:<form action="abc" method="post">1<input type="checkbox" name="id" value="1" >高度<input type="text" name="toollist[0].height" >长度<input type="text" name="toollist[0].width" >

2018-03-13 17:28:08 2427

原创 SpringMVC第七篇——使用对象接收参数

提交的表单:<form action="abc" method="post">姓名<input type="text" name="username" ><br>密码<input type="text" name="password" ><br>手机号<input type="text" name="phone" ><br><button type="submit">点

2018-03-13 16:28:42 2849 2

原创 SpringMVC第六篇——解决中文乱码(POST/GET提交)

SpringMVC中get和post中文乱码要分开解决:POST提交:只需要在web.xml中添加如下配置。post中文乱码就解决了。 拦截规则根据自己需求 &lt;filter&gt; &lt;filter-name&gt;encoding&lt;/filter-name&gt; &lt;filter-class&gt;org.springframe...

2018-03-13 11:16:22 341

原创 SpringMVC第四篇——处理器映射器,处理器适配器,视图解析器的配置

这两个注解的作用和来源:<mvc:annotation-driven/><bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value=""/> <property name="suffix" v

2018-02-14 15:20:14 8229 2

原创 post+js解密实战——e路同心

1:登录页面:使用15517986666 密码a123456 登录抓包谷歌浏览器抓包: 火狐抓包: 分析出: 加密后的密码一致:2:找到js关键加密的地方 modulus exponent 两个是页面隐藏的常量3:js调试工具调试这里使用的是乐易编程助手1.73.1写js方法3.1点击运行报错如下3.2找到setMaxDigits()方法3.3将整个js拷贝到调试工具中3.4点

2018-01-31 01:13:26 7740 1

原创 post 报:您的请求来路不正确或表单验证串不符

如图: 这是我在操作一个post 发帖 爆出来的错误。 数据包参数:formhash 88236e64handlekey newthreadmessage SDSDseccodehash cSAcMOP68seccodemodid forum::postseccodeverify EEEEsubject 111typeid 0原因为:每次登陆成功,服务端就在

2018-01-30 23:52:31 2638

原创 Solr第四篇——schema.xml的配置

在solr家里面的核内,的conf目录下,有两个配置文件是我们要掌握的。 一个是核心配置文件solrconfig.xml,一个就是schema.xml Schema.xml中配置的是什么东西? 配置了大量的域。 打开schema.xml。看,里面配置了大量的域,选取这个进行介绍。 这条配置是个什么意思呢? 意思就是配置了一个域, 名字叫version 类型是long类型,注意

2018-01-06 11:03:20 4674

zookeeper客户端 图形化界面

zookeeper客户端 图形化界面zookeeper客户端 图形化界面zookeeper客户端 图形化界面zookeeper客户端 图形化界面zookeeper客户端 图形化界面

2018-04-08

dubbo—2.5.4

dubbo_2.5.4版本dubbo_2.5.4版本dubbo_2.5.4版本dubbo_2.5.4版本dubbo_2.5.4版本

2018-04-08

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除