摘要:
生产者拦截器 拦截器(Interceptor)是早在 Kafka 0.10.0.0 中就已经引入的一个功能,Kafka 一共有两种拦截器:生产者拦截器和消费者拦截器。 生产者拦截器既可以用来在消息发送前做一些准备工作,比如按照某个规则过滤不符合要求的消息、修改消息的内容等,也可以用来在发送回调逻辑前 阅读全文
摘要:
分区器 消息在通过 send() 方法发往 broker 的过程中,有可能需要经过拦截器(Interceptor)、序列化器(Serializer)和分区器(Partitioner)的一系列作用之后才能被真正地发往 broker。拦截器(下一章会详细介绍)一般不是必需的,而序列化器是必需的。消息经过 阅读全文
摘要:
序列化 生产者需要用序列化器(Serializer)把对象转换成字节数组才能通过网络发送给 Kafka。而在对侧,消费者需要用反序列化器(Deserializer)把从 Kafka 中收到的字节数组转换成相应的对象。 消息的 key 和 value 都使用字符串,对应程序中的序列化器也使用了客户端自 阅读全文
摘要:
参数配置 bootstrap.servers:该参数用来指定生产者客户端连接 Kafka 集群所需的 broker 地址清单,具体的内容格式为 host1:port1,host2:port2,可以设置一个或多个地址,中间以逗号隔开,此参数的默认值为“”。注意这里并非需要所有的 broker 地址,因 阅读全文
摘要:
什么是 ZooKeeper 假设对 ZooKeeper 中的数据做了变更(比如新增了一台 Kafka 或者挂掉了一个 Kafka 节点),这时候 ZooKeeper 会主动通知其他监听这个数据的客户端,立即告诉其他客户端说这份元数据有变更。 ZooKeeper 的设计十分巧妙,它的主动通知机制采取的 阅读全文
摘要:
对于一个数据存储系统来说,如何保证数据可靠性、提高读写吞吐量是重中之重。 一、文档分布式存储的流程 我们知道 ES 的索引有一个或者多个分片,而分片又分为主分片和副本分片两种。 那数据写入索引的过程是怎么样的呢?数据写入主分片和副分片的流程又是怎样的呢? 文档分布式存储首先需要找到能存储文档的主分片 阅读全文
摘要:
如上图,这个倒排索引使用哈希表来实现也是可以的,其有着 O(1) 查询复杂度,能完美地满足我们的需求。但是呢,现实中数据往往是海量的,如果简单地使用哈希表来实现倒排索引是不可行的,因为存储海量的数据时,系统将会面临下面几个问题: 分词形成的词项(term)可能是海量的,需要可以在内存和磁盘上高效存储 阅读全文
摘要:
垃圾回收算法 新生代中因为对象都是“朝生夕死的”,深入理解JVM虚拟机上说98%的对象存活率很低,适用于复制算法,复制算法比较适合用于存活率低的内存区域。它优化了标记/清除算法的效率和内存碎片问题。 老年代中存活率较高,要是使用复制算法,每次都要复制大量的对象,会浪费大量的时间,因此复制算法不适合回 阅读全文
摘要:
Java 内存模型规定了 JVM 应该如何使用计算机内存(RAM)。 广义来讲, Java 内存模型分为两个部分: JVM 内存结构 JMM 与线程规范 其中,JVM 内存结构是底层实现,也是我们理解和认识 JMM 的基础。 大家熟知的堆内存、栈内存等运行时数据区的划分就可以归为 JVM 内存结构。 阅读全文
摘要:
字符集简介 我们知道在计算机中只能存储二进制数据,那该怎么存储字符串呢?当然是建立字符与二进制数据的映射关系了,建立这个关系最起码要搞清楚两件事儿: 你要把哪些字符映射成二进制数据? 也就是界定清楚字符范围。 怎么映射? 将一个字符映射成一个二进制数据的过程也叫做编码,将一个二进制数据映射到一个字符 阅读全文