kafka核心源码分析


kafka环境搭建步骤:
1、在github上下载kafka,版本为0.10.1,直接下载zip包
2、在win上安装Scala 2.10.6,下载地址:https://www.scala-lang.org/download/2.10.6.html
3、查询build.gradle文件中的gradleVersion = “4.8.1”,然后下载对应的gradle版本
下载地址:https://gradle.org/next-steps/?version=4.8.1&format=all
4、下载3.4.9 zookeeper并启动
5、在idea中下载Scala plugin插件
6、打开kafka-0.10.1项目
6.1 把config目录下的log4j.properties给放到core子项目的src/main/scala目录下去,这样才能看到服务端运行起来的程序打印出来的日志
6.2 修改 config目录下的server.properties,修改log.dirs,这个是配置kafka的日志存储目录的;修改zookeeper.connect,连接到zookeeper
7、在IntelliJ IDEA里启动kafka,Kafka的启动类是“kafka.Kafka”,他是要读取“server.properties”文件的,必须给他指定这个文件的所在位置才可以
点击“Edit Configuration”菜单,选择“+”号,然后选择“Application”,“Name”输入为“Kafka”,“Main Class”输入为“kafka.Kafka”,“Program arguments”输入为“config/server.properties”,“use classpath of module”输入为“core_main”

1、keepalive参数和tcpNoDelay参数的作用

1、keepalive
keepalive的意思,主要是避免客户端和服务端任何一方如果断开连接之后,别人不知道,一直保持着网络连接的资源;所以设置这个之后,2小时内如果双方没有任何通信,那么发送一个探测包,根据探测包的结果保持连接、重新连接或者断开连接
2、tcpNoDelay
TcpNoDelay,如果默认是设置为false的话,那么就开启Nagle算法,就是把网络通信中的一些小的数据包给收集起来,组装成一个大的数据包然后再一次性的发送出去,如果大量的小包在传递,会导致网络拥塞
如果设置为true的话,意思就是关闭Nagle,让你发送出去的数据包立马就是通过网络传输过去,所以这个参数大家也要注意下

2、初始化与broker的连接代码入口

org.apache.kafka.clients.NetworkClient#ready
========================================org.apache.kafka.clients.NetworkClient#initiateConnect
========================================org.apache.kafka.common.network.Selector#connect

3、poll方法发送请求代码入口

org.apache.kafka.common.network.Selector#pollSelectionKeys
========================================Send send = channel.write();
========================================org.apache.kafka.common.network.KafkaChannel#write
========================================org.apache.kafka.common.network.KafkaChannel#send
========================================org.apache.kafka.common.network.ByteBufferSend#writeTo
========================================

4、解决读取响应的粘包拆包问题代码入口

this.selector.poll(Utils.min(timeout, metadataTimeout, requestTimeoutMs));
========================================org.apache.kafka.common.network.Selector#poll
========================================org.apache.kafka.common.network.Selector#pollSelectionKeys
========================================while ((networkReceive = channel.read()) != null)
========================================org.apache.kafka.common.network.KafkaChannel#read
========================================org.apache.kafka.common.network.KafkaChannel#receive
========================================org.apache.kafka.common.network.NetworkReceive#readFrom
========================================org.apache.kafka.common.network.NetworkReceive#readFromReadableChannel
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值