开放寻址的ThreadLocalMap分析
什么是散列散列表(hashtable)我们平时也叫它哈希表或者Hash表,它用的是数组支持按照下标随机访问数据的特性,所以散列表其实就是数组的一种扩展,由数组演化而来。可以说,没有数组就没有散列表。比如我们有100件商品,编号没有规律的4位数字,现在我们想要通过编号快速获取商品信息,如何做呢?我们可
为什么零拷贝可以提升Kafka性能?
从操作系统说起计算机系统是由“硬件”和“软件”两大部分组成,计算机硬件包括一个或多个处理器(CPU)、内存、键盘、显示器、磁盘、I/O接口以及其他一些外围设备比如打印机,绘图仪等等。总之,计算机硬件部分是一个由多种电子和机械设备组成的硬件系统。为了让人方便正确使用这些设备,就需要编写若干程序来管理这
MongoDB锁事
MongoDB有4个粒度级别的锁Global(MongoD实例)--所有的数据库上加锁Database--锁定某个数据库Collection--锁定某个集合Document--锁定某个文档MongoDB本身只提供Global,Database,Collection三个级别的锁,Document级别的
MongoDB中有几种日志?
任何一种数据库都有各种各样的日志,MongoDB也不例外。MongoDB中有4种日志,分别是系统日志、Journal日志、oplog主从日志、慢查询日志等。这些日志记录着MongoDB数据库不同方面的踪迹。下面分别介绍这几种日志。系统日志系统日志在MongoDB数据库中很重要,它记录着MongoDB
为什么要有复合索引?
什么是索引要理解索引,你需要在脑中有个画面,这里建议想象一本食谱,不是普通食谱,而是5000页的厚重食谱,包含各种场合、菜肴和季节的食谱。虽然这个食谱很全,但是它有个缺点就是它是乱序的,第一页可能是鱼香茄子,第3000页是红烧茄子。这还不是很要紧,关键问题是这本食谱没有索引!下面是你要问自己的第一个
Kafka Consumer 源码分析之分区方案
consumer提供三种不同的分区策略,可以通过partition.assignment.strategy参数进行配置,默认使用的策略是org.apache.kafka.clients.consumer.RangeAssignor,还存在org.apache.kafka.clients.consum
Kafka Consumer的offset是如何提交的?
Kafkaconsumer的offset提交机制有以下两种手动提交同步提交consumer.commitSync()方式提交异步提交consumer.commitAsync(callback)方式提交自动提交props.put("enable.auto.commit","true");props.p
Kafka Consumer源码之Offset及Fetcher分析
上一篇讲了consumer如何加入consumergroup的,现在加入组成功之后,就要准备开始消费,但是我们需要知道consumer从offset为多少的位置开始消费。consumer中关于如何消费有2种策略:1.手动指定调用consumer.seek(TopicPartition,offset)
Kafka Consumer如何加入Consumer Group
consumer比producer要复杂许多,producer没有组的概念,也不需要关注offset,而consumer不一样,它有组织(consumergroup),有纪律(offset)。这些对consumer的要求就会很高,这篇文章就先从consumer如何加入consumergroup说起。
优雅的使用Kafka Consumer
如何消费数据我们已经知道了如何发送数据到Kafka,既然有数据发送,那么肯定就有数据消费,消费者也是Kafka整个体系中不可缺少的一环publicclassKafkaConsumerDemo{publicstaticvoidmain(String[]args)throwsInterruptedExc
我终于搞清楚了和String有关的那点事儿。
String,是Java中除了基本数据类型以外,最为重要的一个类型了。很多人会认为他比较简单。但是和String有关的面试题有很多,下面我随便找两道面试题,看看你能不能都答对:Q1:Strings=newString("hollis");定义了几个对象。Q2:如何理解String的intern方法?
Kafka Producer消息收发设计
前几篇文章分析了Kafka的发送流程以及NIO的使用方式,但是还是留下了不少坑,这里就对剩下的问题做一个总结。收到的数据为什么要缓存起来?Kafka中Selector读取从远端回来的数据的时候会先把收到的数据缓存起来privatevoidattemptRead(SelectionKeykey,Kaf
从Kafka到Java NIO
在谈NIO之前,简单回顾下内核态和用户态内核空间是Linux内核运行的空间,而用户空间是用户程序的运行空间,为了保证内核安全,它们之间是隔离的,即使用户的程序崩溃了,内核也不受影响。内核空间可以执行任意命令,调用系统的一切资源,用户空间只能执行简单运算,不能直接调用系统资源(I/O,进程资源,内存分
Kafka Producer网络层源码分析
上一篇讲了KafkaProducer发送消息的主体流程,这一篇我们分析下Kafka的网络层源码。对于发送消息而言,Producer是客户端,Broker是服务器端。Kafka使用了JavaNIO向服务器发送消息,所以在这之前需要了解javanio的基本知识。这次网络层源码分析从metadatareq
图说HTTPS协议
故事还要从月月给她老公亮亮发了一条消息说起。晚上亮亮下班回到家,刚一进门“给我跪下”,“咋了,媳妇儿?”,嘴上这样问着,可是亮亮的身体还是很诚实。“你不是给我发消息说今晚不回家吗?”说着月月掏出了手机。“天地良心我没这么说过,我今天收到了你的消息还是你骂我呢”,亮亮也掏出了自己的手机。“好神奇,我们
从 Java 字节码分析中我学到了什么
实参和形参publicintsum(intx,inty){returnx+y;}sum(2,3);上面的代码中sum()方法中的x,y就是形参,而调用方法sum(2,3)中的2与3就是实参。形参是在方法定义阶段,而实参实在方法调用阶段。查看字节码基本类型参数调用privatestaticintint
我是如何理解Java8 Stream
之前看了许多介绍Java8Stream的文章,但是初次接触真的是难以理解(我悟性比较低),没办法只能"死记硬背",但是昨天我打王者荣耀(那一局我赢了,牛魔全场MVP)的时候,突然迸发了灵感,感觉之前没有理解透彻的一下子就理解透彻了。所以决定用简单的方式来回忆下我认为的java8Stream.lamb
我花了一周读了Kafka Producer的源码
开局一段代码talkischeap,showmethecode,先来看一段创建Kafkaproducer的代码1publicclassKafkaProducerDemo{23publicstaticvoidmain(String[]args){45KafkaProducer<String,St
大家好,我是Kafka
大家好,我是kafka,可能很多人都听说过我,知道我是2011年出生在LinkedIn的,从那会儿到现在我的功能越发强大了。作为一个优秀而又完整的平台,你可以在我上面冗余地存储巨大的数据量,我有一个具有高吞吐量(数百万/秒)的消息总线,你可以在这上面对经过我的数据进行实时流处理。如果你认为我就只有上
深入浅出Git——远端命令(你真的懂我吗?)
前面的文章讲的命令都是操作本地仓库的,我相信可以应付大部分的开发状况,提交代码到本地仓库已经不是问题了,那么这次我们就来看看如何和远程仓库进行对接。gitclone---克隆远端代码到本地当我们进行开发的时候,开发流程是这样的:首先将远程仓库(中央仓库)的代码clone到本地,在本地进行开发,开发完