- 博客(25)
- 资源 (4)
- 收藏
- 关注
原创 Kafka社区KIP-500中文译文(去除ZooKeeper)
这个KIP为可扩展的、去ZooKeeper的Kafka提供了一个总体愿景。为了从大局分析及宏观叙事,我基本上省略了RPC格式、磁盘格式等细节。我们希望有后续的KIP来更详细地描述每个步骤。这类似于KIP-4,它提出了一个总体愿景,随后的KIP对此进行详细阐述目前,Kafka集群包含多个broker节点和ZooKeeper的外部仲裁节点。上图中描绘了4个broker节点和3个ZooKeeper节点。这通常是一个小集群的规模。
2024-10-31 19:08:09 1191
原创 Kafka原理剖析之「Purgatory(炼狱 | 时间轮)」
本文介绍一下Kafka赫赫有名的组件Purgatory,相信做Kafka的朋友或多或少都对其有一定的了解,至少是听过它的名字。那它的作用是什么呢,用来解决什么问题呢?官网confluent早就有文章对其做了阐述这里简单总结一下:Purgatory是用来存储那些处于临时或等待状态的请求,这些请求可能某些条件未被满足,而被临时管理了起来。在这些条件满足后,或者请求超时后,这些请求会被Purgatory高效回调,继而继续执行后续逻辑这里聊个题外话,为什么Kafka要给其取名“炼狱”呢?
2024-10-15 15:02:20 814
原创 Kafka原理剖析之「Topic创建」
Kafka提供了高性能的读写,而这些读写操作均是操作在Topic上的,Topic的创建就尤为关键,其中涉及分区分配策略、状态流转等,而Topic的新建语句非常简单--bootstrap-server localhost:9092 \ // 需要写入endpoints--create --topic topicA // 要创建的topic名称--partitions 10 // 当前要创建的topic分区数。
2024-09-07 17:17:49 2007 1
原创 Kafka原理剖析之「位点提交」
手动的同步提交与异步提交有什么区别?使用自动提交模式时,提交动作是同步的还是异步的?消费模式使用assign或subscribe,在提交位点时有区别吗?同步提交与异步提交能否混合使用?手动提交与自动提交能否混合使用?其实这些问题都是万变不离其宗,我们把各个特征总结一下,这些问题自然也就迎刃而解在开始介绍Consumer端的网络模型之前,我们先看下Producer的。
2024-04-07 19:00:50 1050
原创 Kafka之Producer网络传输
我们首先回想一下Producer消息发送的整体流程客户端线程会不断地写入数据,当前线程并不会阻塞,而是马上返回。这个时候消息被Producer放在了缓存内,消息并没有真正发送出去Producer内部为每个Partition维护了一个RecordBatch的队列,先进先出的模式,统称为RecordAccumulator,数据第一步会先放在这个组件中。放在这个组件中的数据什么时候会真正发送出去呢?这里其实是“大巴车”逻辑(大巴车逻辑是指:1、如果某辆大巴车已经坐满人了,这个时候无条件立即发车。
2024-03-23 12:16:37 951 1
原创 Kafka 社区KIP-382中文译文(MirrorMaker2/集群复制/高可用/灾难恢复)
译者:对于Kafka高可用的课题,我想每个公司都有自己的方案及思考,这是一个仁者见仁智者见智的命题,而社区给出了一个较大的特性,即MirrorMaker 2.0,不论是准备做高可用还是单纯的数据备份,都不能绕过这个重大特性。而关于MirrorMaker 2.0的文章,网络上真是多如牛毛,质量也是参差不齐,而能够将这个特性完整描述出来的,非社区的此篇设计稿莫属,也因此有了翻译此文的初衷。ps: 有任何kafka问题欢迎评论、私信交流。本人VX: likangning9。
2024-01-23 16:57:05 1190 3
原创 Kafka干货之「零拷贝」
其实这里主要是与硬件兼容,现在多数厂商的硬件,单次扫数据的大小一般都是4K对齐的,很多硬件都提升到了8K甚至16K,稀疏索引设置为4K,能保证即便是当前的 Record Batch 只有 1 个字节,后续的内容也能缓存在Page Cache中,下次扫描的时候,可以直接从缓存中读取,而不用扫描磁盘。其实这里使用的是二分查找,当知道某个队列的起始结束offset,快速定位其中的某个offset时,二分查找是个非常不错的方案,具体实现类在scala/kafka/log/AbstractIndex.scala。
2024-01-22 09:39:01 1088
原创 Kafka 社区KIP-405中文译文(分层存储)
译者:Kafka KIP-405是一篇非常优秀的多层存储的设计稿,不过此设计稿涉及内容很多,文章量大、严谨、知识点诸多。我们国内还没有对其有相对完整的译文,面对如此上乘的文章,译者想降低其门槛,让国内更多的人了解其设计,因此花费了诸多时间精力将此文进行了全文翻译,同时有一些可能让人产生疑惑的技术细节,译者也都打上了注释,希望可以帮助更多的人。当然如果有一些Kafka基础,且英文阅读流畅的话,译者还是建议去看原文。
2024-01-19 11:48:48 994 1
原创 从一次Kafka宕机说起(JVM hang)
因为是线上服务,而且进程还在,就是不提供服务了,第一反应就是保留一下 stack 信息,先重启吧。Arthas 是一款线上监控诊断产品,通过全局视角实时查看应用 load、内存、gc、线程的状态信息,并能在不修改应用代码的情况下,对业务问题进行诊断,包括查看方法调用的出入参、异常,监测方法执行耗时,类加载信息等,大大提升线上问题排查效率。对于这些操作,都需要线程的各种信息,例如寄存器中到底有啥,堆使用信息以及栈方法代码信息等等等等,并且做这些操作的时候,线程需要暂停,等到这些操作完成,否则会有并发问题。
2023-10-23 15:31:53 447 3
原创 RocketMQ架构原理解析(三):消息索引(ConsumeQueue & IndexFile)
一、概述“索引”一种数据结构,帮助我们快速定位、查询数据前文我们梳理了消息在Commit Log文件的存储过程,讨论了消息的落盘策略,然而仅仅通过Commit Log存储消息是远远不够的,例如当我们需要消费某个topic的消息时,通过对Commit Log整体遍历寻找消息的方式无疑非常的低效。所以本章将引出2个很重要的概念:消费队列、IndexFile二、消费队列2.1 概念什么是消费队列呢?其实在上一章的消息协议格式中,就有消息队列的体现,简单回顾一下协议的前6个字段:msg total
2021-12-13 08:37:47 1621
原创 RocketMQ架构原理解析(二):消息存储(CommitLog)
一、概述由前文可知,RocketMQ有几个非常重要的概念:broker 服务端,负责存储、收发消息producer 客户端1,负责产生消息consumer 客服端2,负责消费消息既然是消息队列,那消息的存储的重要程度不言而喻,本节我们聚焦broker服务端,看下消息在broker端是如何存储的,它的落盘策略是怎样的,又是如何保证高效二、写入流程RocketMQ的普通单消息写入流程如下[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传简单可以分为三大块:写入前准备
2021-12-13 08:34:05 1452
原创 RocketMQ架构原理解析(一):整体架构
一、概述RocketMQ作为一个apache的顶级项目,拥有将近16K的star,它稳定的系统及强悍的性能,无疑在国内已经成为了企业消息队列的首选。接下来的一段时间,鄙人准备出一系列文章,从源码出发,逐一剖析RocketMQ的架构设计原理本文将仅做概念上的陈述github地址二、概念及模型本文中部分概念描述搬运自github官网RocketMQ主要由 Producer、Broker、Consumer 三部分组成,其中Producer 负责生产消息,Consumer 负责消费消息,Broker
2021-12-13 08:30:19 401
原创 《阿里云第三届数据库性能挑战赛》分享
一、前言赛题官网: 阿里云第三届数据库大赛 - 性能挑战赛今年的数据库比赛可谓异常激烈,原定 2021年07月02日 ~ 2021年08月06日 的复赛,因为主办方原因被延期至 2021-08-20,而前排的分数相差都在秒、半秒、甚至毫秒级,“卷”的程度可见一斑一般这种限定Java语言的比赛,鄙人都是会义无反顾参与的,在享受比赛的期间,更可以提高自身技术,何乐而不为呢?国际惯例,先报下本次比赛成绩哈赛段排名预热塞3第一赛季2第二赛季6决赛答辩季军
2021-11-24 08:33:01 391
原创 深入理解Java并发框架AQS系列(五):条件队列(Condition)
一、前言AQS中的条件队列相比较前文中的“独占锁”、“共享锁”等比较独立,即便没有条件队列也丝毫不影响诸如ReentrantLock、Semaphore类的实现,那如此说来条件队列是否就是一个可有可无的产物?答案是否定的,我们来看下直接或间接用到条件队列的JDK并发类:ReentrantLock 独占锁经典类ReentrantReadWriteLock 读写锁ArrayBlockingQueue 基于数组的阻塞队列CyclicBarrier 循环栅栏,解决线程同步问题DelayQueue 延时
2021-04-28 10:34:46 490
原创 深入理解Java并发框架AQS系列(四):共享锁(Shared Lock)
一、前言那些“简单的”并发代码背后,隐藏着大量信息。。。独占锁虽说在j.u.c中有现成的实现,但在JAVA的语言层面也同样提供了支持(synchronized);但共享锁却是只存在于AQS中,而它在实际生产中的使用频次丝毫不亚于独占锁,在整个AQS体系中占有举重若轻的地位。而在某种意义上,因为可能同时存在多个线程的并发,它的复杂度要高于独占锁。本章除了介绍共享锁数据结构等,还会重点对焦并发处理,看 doug lea 在并发部分是否有遗漏j.u.c下支持的并发锁有Semaphore、CountDow
2021-04-09 08:03:39 513
原创 深入理解Java并发框架AQS系列(三):独占锁(Exclusive Lock)
深入理解Java并发框架AQS系列(三):独占锁(Exclusive Lock)一、前言优秀的源码就在那里经过了前面两章的铺垫,终于要切入正题了,本章也是整个AQS的核心之一从本章开始,我们要精读AQS源码,拜读它、欣赏它、学习它并质疑它。当然我们的写作风格不会带着大家逐行去看源码(会有“只在此山中,云深不知处”的弊端),而是从功能入手,对其架构进行逐层剖析,在核心位置重点解读,并提出质疑;虽然AQS源码读起来比较“跳”,但我还是建议大家花时间、精力去好好读它本章我们会采用经典并发类Reent
2021-03-24 17:37:11 404 2
原创 深入理解Java并发框架AQS系列(二):AQS框架简介及锁概念
深入理解Java并发框架AQS系列(一):线程深入理解Java并发框架AQS系列(二):AQS框架简介及锁概念一、AQS框架简介AQS诞生于Jdk1.5,在当时低效且功能单一的synchronized的年代,某种意义上讲,她拯救了Java注:本系列文章所有测试用例均基于jdk1.8,操作系统为macOS1.1、思考我们去学习一个知识点或开启一个新课题时,最好是带着问题去学习,这样针对性比较强,且印象比较深刻,主动思考带给我们带来了无穷的好处抛开AQS,设想以下问题:Q:如果我们遇到
2021-03-14 21:36:19 398 2
原创 深入理解Java并发框架AQS系列(一):线程
深入理解Java并发框架AQS系列(一):线程深入理解Java并发框架AQS系列(二):AQS框架简介及锁概念一、概述1.1、前言重剑无锋,大巧不工读j.u.c包下的源码,永远无法绕开的经典并发框架AQS,其设计之精妙堪比一件艺术品,令众多学者毫不吝惜溢美之词。近期准备出一系列关于AQS的文章,系统的来讲解AQS,我将跟大家一起带着敬畏之心去读她,但也会对关键部分提出质疑及思考本来打算直接以阐述锁概念作为开头,但发现始终都绕不过线程这关,再加上现在好多讲述线程的文章概念混淆不清,误人子弟,索
2021-03-14 21:34:50 308 2
原创 《中间件性能挑战赛--分布式统计和过滤的链路追踪》java 选手分享
2020年6月份天池举办的《中间件性能挑战赛》可谓是异常激烈,本人抽业余时间报名参与,感受比赛惨烈的同时,也有诸多感慨哈,总结一个多月的赛程,多少有一些心得与大家分享赛题赛题地址: https://tianchi.aliyun.com/competition/entrance/231790/information实现一个分布式统计和过滤的链路追踪赛题背景本题目是另外一种采样方式(tail-based Sampling),只要请求的链路追踪数据中任何节点出现重要数据特征(错慢请求),这个.
2021-03-14 21:31:51 308
原创 Java ClassLoader浅析
双亲委派提起 java 类加载器,自然绕不开其双亲委派模型什么是双亲委派提起双亲委派,首先想到便是那张经典的向上委派图 一般场景下,当某个类将要被加载时,由系统上下文默认的类加载器Thread.currentThread().getContextClassLoader()对该类进行加载,通常这个类加载器为AppClassLoader,AppClassLoader不会直接尝试加载这个类,而是委托给它的父类ExtClassLoader对其加载,ExtClassLoader则会直接委托父类Boots
2021-03-14 21:28:14 202 1
原创 ConcurrentHashMap 并发之美
一、前言她如暴风雨中的一叶扁舟,在高并发的大风大浪下疾驰而过,眼看就要被湮灭,却又在绝境中绝处逢生编写一套即稳定、高效、且支持并发的代码,不说难如登天,却也绝非易事。一直有小伙伴向我咨询关于ConcurrentHashMap(后文简写为CHM)的问题,常常抱怨说:其他源码懂就是懂了,不懂就是不懂,唯独CHM总给人一种似懂非懂的感觉,感觉抓住了精髓,却又若即若离。其实,之所以有这种感觉,并不难理解,因为本质上CHM是一套支持高并发的代码,同一个方法、同一个返回值,在不同的线程或不同并发场景都需要完美运行
2021-03-14 21:23:43 278 2
java3d的安装包及环境配置(最新java3d-5.2)
2012-03-27
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人