
消息中间件
文章平均质量分 93
朱小厮
你知道的越多 你不知道的也就越多
展开
-
为什么Kafka中的分区数只能增加不能减少?
欢迎支持《RabbitMQ实战指南》以及关注微信公众号:朱小厮的博客。当一个主题被创建之后,依然允许我们对其做一定的修改,比如修改分区个数、修改配置等,这个修改的功能就是由kafka-topics.sh脚本中的alter指令所提供。我们首先来看如何增加主题的分区数。以前面的主题topic-config为例,当前分区数为1,修改为3,示例如下:[root@node1 kafka_2.11-...原创 2018-09-21 17:14:29 · 17187 阅读 · 3 评论 -
如何把一个运行完好的Kafka搞崩溃
Kafka其实也只是一个JVM进程,要想把一个进程搞崩溃,相信大家的nice idea(骚操作)也不少。本文中只是用了一种很常见的方式来使得Kafka的进程崩溃,通过分析崩溃的原因来让我们可以更合理的使用Kafka。你可以试着在一台普通的Linux机器上创建10000个分区的主题。比如下面示例中创建一个主题topic-bomb:[root@node1 kafka_2.11-2.0.0]# bi...原创 2018-09-21 17:12:12 · 5122 阅读 · 1 评论 -
Kafka分区分配策略(4)——分配的实施
接上文: 1.【Kafka分区分配策略(1)——RangeAssignor】 2.【Kafka分区分配策略(2)——RoundRobinAssignor和StickyAssignor】 3.【Kafka分区分配策略(3)——自定义分区分配策略](https://blog.youkuaiyun.com/u013256816/article/details/81123858)】分配的实施我们...原创 2018-07-19 22:25:45 · 2764 阅读 · 2 评论 -
Kafka分区分配策略(3)——自定义分区分配策略
接上文: 1.【Kafka分区分配策略(1)——RangeAssignor】 2.【Kafka分区分配策略(2)——RoundRobinAssignor和StickyAssignor】自定义分区分配策略读者不仅可以任意选用Kafka所提供的3种分配策略,还可以自定义分配策略来实现更多可选的功能。自定义的分配策略必须要实现org.apache.kafka.clients.consum...原创 2018-07-19 22:21:19 · 8070 阅读 · 2 评论 -
Kafka分区分配策略(2)——RoundRobinAssignor和StickyAssignor
接上文【Kafka分区分配策略(1)——RangeAssignor】RoundRobinAssignor分配策略RoundRobinAssignor策略的原理是将消费组内所有消费者以及消费者所订阅的所有topic的partition按照字典序排序,然后通过轮询方式逐个将分区以此分配给每个消费者。RoundRobinAssignor策略对应的partition.assignment.st...原创 2018-07-19 22:04:11 · 11695 阅读 · 25 评论 -
Kafka分区分配策略(1)——RangeAssignor
引言按照Kafka默认的消费逻辑设定,一个分区只能被同一个消费组(ConsumerGroup)内的一个消费者消费。假设目前某消费组内只有一个消费者C0,订阅了一个topic,这个topic包含7个分区,也就是说这个消费者C0订阅了7个分区,参考下图(1)。此时消费组内又加入了一个新的消费者C1,按照既定的逻辑需要将原来消费者C0的部分分区分配给消费者C1消费,情形上图(2),消费者C0...原创 2018-07-19 22:01:48 · 24823 阅读 · 10 评论 -
直击Kafka的心脏——控制器
在Kafka集群中会有一个或者多个broker,其中有一个broker会被选举为控制器(Kafka Controller),它负责管理整个集群中所有分区和副本的状态。当某个分区的leader副本出现故障时,由控制器负责为该分区选举新的leader副本。当检测到某个分区的ISR集合发生变化时,由控制器负责通知所有broker更新其元数据信息。当使用kafka-topics.sh脚本为某个topic增...原创 2018-06-30 12:07:44 · 14183 阅读 · 5 评论 -
《RabbitMQ实战指南》笔误及改进记录
2017年12月上旬笔者的一本新书——《RabbitMQ实战指南》上架,里面的校稿都是自己独自完成的,一共进行了15遍,但还是会有漏网之鱼。本篇博文用来记录现在发现的一些笔误,一是给购书的朋友一个参考,以防被笔误所迷惑;二是提供一个记录笔误的地方,方便再次印刷修改之用,这样也能进一步的完善这本书。小伙伴们也可以提供一些新发现的笔误之处,这里都会记录,为了鼓励大家,发现笔误的小伙伴会在下一次印刷...原创 2017-12-12 20:09:51 · 17935 阅读 · 70 评论 -
Kafka参数图鉴——unclean.leader.election.enable
Kafka参数图鉴——unclean.leader.election.enable如何提高Kafka可靠性是一个可以长篇大论的主题。很多初学者会简单的认为将客户端参数acks设置为-1即可保证Kafka的可靠性,显然这是很片面的观点。就可靠性本身而言,它并不是一个可以用“是”或者“否”来衡量的一个指标,而一般是用几个9来衡量。就参数方面而言,与Kafka可靠性相关的参数不止acks这一个,比如...原创 2018-06-24 11:44:12 · 10819 阅读 · 3 评论 -
Kafka参数broker.id详解
kafka在启动服务之前必须要设定3个参数:broker.id、log.dirs、zookeeper.connect,这里我们就来重点说一下broker.id这个参数。在Kafka集群中,每个broker都有一个唯一的id值用来区分彼此。Kafka在启动时会在zookeeper中/brokers/ids路径下创建一个与当前broker的id为名称的虚节点,Kafka的健康状态检查就依赖于此节点。当...原创 2018-06-02 11:18:14 · 31575 阅读 · 5 评论 -
Kafka解惑之时间轮(TimingWheel)
Kafka中存在大量的延迟操作,比如延迟生产、延迟拉取以及延迟删除等。Kafka并没有使用JDK自带的Timer或者DelayQueue来实现延迟的功能,而是基于时间轮自定义了一个用于实现延迟功能的定时器(SystemTimer)。JDK的Timer和DelayQueue插入和删除操作的平均时间复杂度为O(nlog(n)),并不能满足Kafka的高性能要求,而基于时间轮可以将插入和删除操作的时间复...原创 2018-06-14 19:42:57 · 39883 阅读 · 26 评论 -
Kafka日志清理之Log Compaction
在上一篇文章《Kafka日志清理之Log Deletion》中介绍了日志清理的方式之一——日志删除,本文承接上篇,主要来介绍Log Compaction。Kafka中的Log Compaction是指在默认的日志删除(Log Deletion)规则之外提供的一种清理过时数据的方式。如下图所示,Log Compaction对于有相同key的的不同value值,只保留最后一个版本。如果应用...原创 2018-05-28 19:57:16 · 9338 阅读 · 8 评论 -
新书《深入理解Kafka:核心设计与实践原理》上架,感谢支持~
新书上架初识 Kafka 时,笔者接触的还是 0.8.1 版本,Kafka 发展到目前的 2.x 版本,笔者也见证了Kafka的蜕变,比如旧版客户端的淘汰、新版客户端的设计、Kafka 控制器的迭代优化、私有协议的变更、事务功能的引入等。Kafka从昔日的新星逐渐走向成熟,再到今日的王者地位不可撼动,这期间有太多的故事可讲。刚接触 Kafka 时,市面上还并没有任何关于 Kafka 的书籍。在...原创 2019-02-24 00:40:53 · 7810 阅读 · 17 评论 -
Kafka主题中的分区数越多吞吐量就越高?BULLSHIT!!!
分区是Kafka中最小的并行操作单元,对于生产者而言,对于每一个分区的数据写入是完全可以并行化的;对于消费者而言,Kafka只允许单个分区中的消息被一个消费者线程所消费,一个消费组的消费并行度完全依赖于所消费的分区数。如此看来,如果一个主题中的分区数越多,理论上所能达到的吞吐量就越大,那么事实真的如预想的一样么?不妨我们使用kafka-producer-perf-test.sh脚本和kafka-...原创 2019-06-26 19:59:58 · 4803 阅读 · 3 评论 -
为了追求极致的性能,Kafka掌控这11项要领
很多同学私信问我Kafka在性能优化方面做了哪些举措,对于相关问题的答案其实我早就写过了,就是没有系统的整理一篇,最近思考着花点时间来整理一下,下次再有同学问我相关的问题我就可以潇洒的甩个链接了。这个问题也是Kafka面试的时候的常见问题,面试官问你这个问题也不算刁难你。在网上也有很多相关的文章开讲解这个问题,比如之前各大公众号转载的《为什么Kafka这么快?》,这些文章我看了,写的不错,问题在于...原创 2019-06-26 19:57:02 · 3785 阅读 · 10 评论 -
聊一聊Kafka分区的隐藏属性——二次归类
在使用Kafka的过程中,分区是一个不可忽视的概念。很多时候你会带着这样的疑问:Kafka的分区该怎么划分?按什么划分?分多少个?撰稿之时,我在《深入理解Kafka》一书中搜索了一下“分区”这个词,结果发现出现的频率至少有4位数之多。Kafka中分区的概念涉猎很多,比如:分区分配、分区重分配、失效分区等。在本公众号里也发表过几篇文章来讲述Kafka分区中的某些知识点:如何为Kafka挑选合适的...原创 2019-06-04 02:48:15 · 917 阅读 · 1 评论 -
周末随笔 | 笔耕者的悲哀 —— 盗亦无道
今天所要说的不是技术,而是盗版这个现象。对于技术公众号来说,很少会写一些技术之外的东西。而且写一些实事类的东西对触碰到一部分人的利益,更有甚者会被“安排”。对于盗版,我其实已经习惯了,也早已习惯地采取“鸵鸟策略”来应对。不过昨天发生的一件事情确实有点让人寒心。前天我的书改版的掘金小册上线,我的一些好基友们也纷纷帮忙宣传,我就不一一感谢啦。其中我认识多年的狼哥(不知道狼哥是谁的话,百度一下:占小...原创 2019-05-12 17:07:15 · 1322 阅读 · 13 评论 -
打磨两月,电子版《深入理解Kafka》重新回归!!!
自从3月8日将原本的电子版下架后已有两月有余,今日重新将电子版的《深入理解Kafka》以掘金小册的形式上线。掘金没有推广,只能我自己上了,如有打扰,还望海涵。原本的电子版在亚马逊以及京东上都短暂存在过,将他们下线是因为:1. 这2个平台的电子版定价太高。 说实话,若不是经常看下这些平台的情况,真不知道电子版会上线,因为事先约定的是暂不上线。其次,电子版的定价我事先也不知晓,亚马逊的定价是82....原创 2019-05-10 23:48:46 · 7307 阅读 · 18 评论 -
Kafka科普系列 | 原来Kafka中的选举有这么多?
面试官在考查你Kafka知识的时候很可能会故弄玄虚的问你一下:Kafka中的选举时怎么回事?除非问你具体的哪种选举,否则问这种问题的面试官多半也是对Kafka一知半解,这个时候就是“弄死”他的时候。当然如果你没有一定的知识储备,那么就是你被“弄死”的时候。一般问这个问题,那么他肯定知道其中的一种,比如分区leader的选举。所谓分区leader的选举就是当ISR中的leader副本歇菜了,再重新...原创 2019-04-18 02:02:25 · 4845 阅读 · 14 评论 -
干趴面试官系列 | 请你简述一下Kafka中的分区分配
“请你简述一下Kafka中的分区分配”,当面试官问你这个问题的时候,你会怎么回答?其实,这道题目里面就暗藏汹涌,因为Kafka中的分区分配在多处出现,而这个问题的表述方式是在潜意识里暗示你回答一种,这样在你自认为很完美的回答完这个问题之后,面试官会冷不丁的来一句:还有呢?当你回答完一个点的时候,面试官来一句还有呢,当你再补上一个的时候,他还是会来一句还有呢,就算你又补上第三个的时候,他还是会来一...原创 2019-04-26 01:32:23 · 5916 阅读 · 18 评论 -
Kafka科普系列 | 轻松理解Kafka中的延时操作
本文起源于之前去面试的一道面试题,面试题大致上是这样的:消费者去Kafka里拉去消息,但是目前Kafka中又没有新的消息可以提供,那么Kafka会如何处理?如下图所示,两个follower副本都已经拉取到了leader副本的最新位置,此时又向leader副本发送拉取请求,而leader副本并没有新的消息写入,那么此时leader副本该如何处理呢?可以直接返回空的拉取结果给follower副本,不...原创 2019-04-16 08:37:23 · 9820 阅读 · 1 评论 -
Kafka科普系列 | Kafka中的事务是什么样子的?
事务,对于大家来说可能并不陌生,比如数据库事务、分布式事务,那么Kafka中的事务是什么样子的呢?在说Kafka的事务之前,先要说一下Kafka中幂等的实现。幂等和事务是Kafka 0.11.0.0版本引入的两个特性,以此来实现EOS(exactly once semantics,精确一次处理语义)。幂等,简单地说就是对接口的多次调用所产生的结果和调用一次是一致的。生产者在进行重试的时候有可能...原创 2019-04-09 09:56:29 · 32555 阅读 · 3 评论 -
Kafka科普系列 | 什么是LSO?
很多同学对于Kafka的认知仅限于在LEO和HW之间,有可能认知还出现错误,对此记住一点,这两个都是指最后一条的下一条的位置而不是指最后一条的位置。不过本文的关注点不在于此,而在于LSO这个概念。如果需要了解LEO和HW的同学可在文末留言,后面也可以考虑出个科普LEO和HW的文章。LSO特指LastStableOffset,在上一篇《Kafka科普系列 | 什么是LW和logStartOffse...原创 2019-04-03 02:00:37 · 7551 阅读 · 4 评论 -
Kafka科普系列 | 什么是LW和logStartOffset?
欢迎支持笔者新作:《深入理解Kafka:核心设计与实践原理》和《RabbitMQ实战指南》,同时欢迎关注笔者的微信公众号:朱小厮的博客。很多读者对 Kafka 中的 HW 的概念并不陌生,但是却并不知道还有一个 LW 的 概念。HW 是 High Watermark 的缩写,俗称高水位,它标识 了一个特定的消息偏移量(offset),消费者只能拉取到这个 offset 之前的消息。如上图...原创 2019-04-01 00:58:48 · 3906 阅读 · 1 评论 -
Kafka最全面试题整理|划重点要考
欢迎支持笔者新作:《深入理解Kafka:核心设计与实践原理》和《RabbitMQ实战指南》,同时欢迎关注笔者的微信公众号:朱小厮的博客。有很多人问过我要过Kafka相关的面试题,我一直懒得整理,这几天花了点时间,结合之前面试被问过的、别人咨询过的、我会问别人的进行了相关的整理,也就几十题,大家花个几分钟看看应该都会。面试题列表如下:Kafka的用途有哪些?使用场景如何?Kafka中的I...原创 2019-03-14 12:55:18 · 15064 阅读 · 16 评论 -
《深入理解Kafka:核心设计与实践原理》笔误及改进记录
2019年2月下旬笔者的有一本新书——《深入理解Kafka:核心设计与实践原理》上架,延续上一本《RabbitMQ实战指南》的惯例,本篇博文用来记录现在发现的一些笔误,一是给购书的朋友一个参考,以防被笔误所迷惑;二是提供一个记录笔误的地方,方便再次印刷修改之用,这样也能进一步的完善这本书。本书出版之前已校稿多次,也邀请了专业的技术小伙伴进行校稿,但还是会有漏网之鱼,还望各位海涵。(本文长期更新)...原创 2020-05-07 18:57:45 · 11762 阅读 · 43 评论 -
Kafka日志清理之Log Deletion
Kafka将消息存储在磁盘中,为了控制磁盘占用空间的不断增加就需要对消息做一定的清理操作。Kafka中每一个分区partition都对应一个日志文件,而日志文件又可以分为多个日志分段文件,这样也便于日志的清理操作。Kafka提供了两种日志清理策略:日志删除(Log Deletion):按照一定的保留策略来直接删除不符合条件的日志分段。日志压缩(Log Compaction):针对每个消息的...原创 2018-05-23 12:35:51 · 31618 阅读 · 12 评论 -
Kafka消息格式中的变长字段(Varints)
kafka从0.11.0版本开始所使用的消息格式版本为v2,这个版本的消息相比于v0和v1的版本而言改动很大,同时还参考了Protocol Buffer而引入了变长整型(Varints)和ZigZag编码。为了更加形象的说明问题,首先我们来了解一下变长整型。Varints是使用一个或多个字节来序列化整数的一种方法。数值越小,其所占用的字节数就越少。Varints中每个字节都有一个位于最...原创 2018-05-13 16:25:44 · 2541 阅读 · 2 评论 -
一文看懂Kafka消息格式的演变
摘要对于一个成熟的消息中间件而言,消息格式不仅关系到功能维度的扩展,还牵涉到性能维度的优化。随着Kafka的迅猛发展,其消息格式也在不断的升级改进,从0.8.x版本开始到现在的1.1.x版本,Kafka的消息格式也经历了3个版本。本文这里主要来讲述Kafka的三个版本的消息格式的演变,文章偏长,建议先关注后鉴定。Kafka根据topic(主题)对消息进行分类,发布到Kafka集群的每条...原创 2018-05-13 16:21:20 · 28828 阅读 · 8 评论 -
Kafka解惑之Old Producer(4)——Case Analysis
上接: 1. Kafka解惑之Old Producer(1)—— Beginning 2. Kafka解惑之Old Producer(2)——Sync Analysis 3. Kafka解惑之Old Producer(3)——Async Analysis在前面三篇文章中详细了解了Old Producer的内容,本文主要通过一个实际应用案例来加深各位对Old Producer的理解。原创 2018-02-02 12:52:08 · 1125 阅读 · 1 评论 -
Kafka解惑之Old Producer(3)——Async Analysis
上接: 1. Kafka解惑之Old Producer(1)—— Beginning 2. Kafka解惑之Old Producer(2)——Sync Analysis讲述完了Sync模式下的结构脉络,下面就来聊一聊Async的,Async会将客户端所要发送的消息暂存在LinkedBlockingQueue中,然后通过特制的ProducerSendThread来根据条件发送。这个Linke原创 2018-02-01 16:47:24 · 1103 阅读 · 0 评论 -
RabbitMQ消息可靠性分析
Introduction有很多人问过我这么一类问题:RabbitMQ如何确保消息可靠?很多时候,笔者的回答都是:说来话长的事情何来长话短说。的确,要确保消息可靠不只是单单几句就能够叙述明白的,包括Kafka也是如此。可靠并不是一个绝对的概念,曾经有人也留言说过类似全部磁盘损毁也会导致消息丢失,笔者戏答:还有机房被炸了也会导致消息丢失。可靠性是一个相对的概念,在条件合理的范围内系统所能确保的多少...原创 2018-01-24 10:15:56 · 10465 阅读 · 5 评论 -
RocketMQ配置
1. 客户端的公共配置类:ClientConfig 参数名 默认值 说明 namesrvAddrNameServer 地址列表,多个NameServer地址用分号隔开 clientIp 本机IP 客户端本机IP地址,某些机器会发送无法识别客户端IP地址的情况,需要应用在代码中强制指定 instanceName DEFAULT ...原创 2017-01-26 11:04:58 · 21262 阅读 · 0 评论 -
ActiveMQ简述
概述ActiveMQ是Apache所提供的一个开源的消息系统,完全采用Java来实现,因此,它能很好地支持J2EE提出的JMS(Java Message Service,即Java消息服务)规范。JMS是一组Java应用程序接口,它提供消息的创建、发送、读取等一系列服务。JMS提供了一组公共应用程序接口和响应的语法,类似于Java数据库的统一访问接口JDBC,它是一种与厂商无关的API,使得Java原创 2016-04-15 14:38:07 · 16556 阅读 · 5 评论 -
Sping+ActiveMQ整合
通过前一篇《ActiveMQ简述》大概对ActiveMQ有了一个大概的认识,本篇所阐述的是如何通过Spring继承ActiveMQ进而更有效、更灵活的运用ActiveMQ.Spring和ActiveMQ整合需要在项目中包含以下这几个jar包(缺一不可):activeio-core-3.1.4.jar,activemq-all-5.13.2.jar,activemq-pool-5.13.2.jar,c原创 2016-04-18 16:19:35 · 12856 阅读 · 8 评论 -
Linux(CentOS)中常用软件安装,使用及异常——Zookeeper, Kafka
本文主要是为了记录在工作中遇到的常用软件的安装过程,方便以后遇到相同情形时可以快速的查阅。主要讲述了zookeeper, kafka的安装。 本文的操作系统采用的是CentOS,可以采用shell命令查阅:lsb_release -a. ZookeeperZookeeper的安装与配置可以在http://zookeeper.apache.org/这里下载需要的安装包。这...原创 2016-08-21 19:02:00 · 5282 阅读 · 0 评论 -
Kafka文件存储机制那些事
Kafka是什么 Kafka是最初由Linkedin公司开发,是一个分布式、分区的、多副本的、多订阅者,基于zookeeper协调的分布式日志系统(也可以当做MQ系统),常见可以用于web/nginx日志、访问日志,消息服务等等,Linkedin于2010年贡献给了Apache基金会并成为顶级开源项目.1.前言一个商业化消息队列的性能好坏,其文件存储机制设计是衡量一个消息队列服务技术水平和最关转载 2017-01-20 22:00:45 · 3091 阅读 · 0 评论 -
RabbitMQ单机多实例配置
由于某些因素的限制,有时候你不得不在一台机器上去搭建一个rabbitmq集群,当然这种集群只适合自己玩玩,验证下结论,这个有点类似zookeeper的单机版。真实生成环境还是要配成多机集群的。有关怎么配置多机集群的可以参考其他的资料,这里主要论述如何在单机中配置多个rabbitmq实例。主要参考官方文档:https://www.rabbitmq.com/clustering.html前提 ...原创 2016-11-21 21:34:31 · 16062 阅读 · 18 评论 -
RabbitMQ脑裂
在RabbitMQ3.4.x中会出现错误的网络分区检测(某种意义上可以称之为脑裂)的现象,本文通过实验验证此现象,愿小伙伴们少走弯路。Preview网上有两篇帖子(需要翻墙) https://groups.google.com/forum/#!topic/rabbitmq-users/dt8VFhMb2zM https://groups.google.com/forum/#!top...原创 2016-11-22 21:13:32 · 19288 阅读 · 5 评论 -
RabbitMQ的安装及集群搭建方法
RabbitMQ安装1 安装erlang 下载地址:http://www.erlang.org/downloads 博主这里采用的是otp_src_19.1.tar.gz (200MB+)[root@hidden util]# tar zxvf otp_src_19.1.tar.gz[root@hidden util]# cd otp_src_19.1 [root@hidde...原创 2016-12-08 21:03:22 · 33789 阅读 · 1 评论