0 前言官网描述六类工作队列模式:简单队列模式:最简单的工作队列,一个消息生产者,一个消息消费者,一个队列。另称点对点模式工作模式:一个消息生产者,一个交换器,一个消息队列,多个消费者。也称点对点模式发布/订阅模式:无选择接收消息,一个消息生产者,一个交换器,多个消息队列,多个消费者路由模式:基于发布/订阅模式,有选择的接收消息,即通过 routing 路由进行匹配条件是否满足接收消息主题模式:同
1 故障背景 10:09:34.948 ifpo.apache .kafka.clients .Networkclient 748[Producer clientId=producer-1] Connection to node 0(10.x.x.x:9093) could not be established. Broker may not be available. 故障细节 生产kafka
1 什么是 MQTT 控制报文? MQTT 数据传输的最小单元。[MQTT 客户端]和服务端通过交换控制报文来实现: 订阅主题 发布消息 MQTT控制报文类型按功能分为连接、发布、订阅三类: CONNECT 报文用于客户端向服务端发起连接,CONNACK 报文则作为响应返回连接的结果。如果想要结束通信,或者遇到了一个必须终止连接的错误,客户端和服务端可以发送一个 DISCONNECT 报文然
2 幂等性 在消费端,让消费消息的操作具备幂等性,对幂等方法,就无需担心重复执行的副作用。即消费多次等于消费一次。 对系统影响结果:At least once + 幂等消费 = Exactly once。 2.1 案例 不考虑并发: “将账户X余额设为100元”,执行一次后对系统的影响是,账户X的余额变成了100元。只要提供参数100元不变,执行多少次,账户X余额始终100,这就是幂等操作 “将
消息消费失败,很多框架最直接解决方案就是自动重新发送,而重试就会产生重复消息。MQTT协议给出三种传递消息时能够提供的服务质量,服务质量其实就表示报文要分送几次。由低到高: 1 QoS 0:At most once(最多分发一次) 消息最多传递一次,即可为0或1次,若当时客户端不可用,则会丢失该消息。即消息在传递时,最多被送达1次。无消息可靠性保证,允许丢消息。 一种 "fire and
MySQL 和 Redis 的监控的核心原理:连到实例执行特定语句命令拉取数据,类似还有 MongoDB,算一类监控场景。要做好Kafka监控:先了解 Kafka基础概念,如Topic(主题)、Partition(分区)、Replica(副本)、AR(Assigned Replicas)、ISR(In-Sync Replicas)、OSR(Out-of-Sync Replicas)、HW(High
消费端的fetch.message.max.bytes指定最大消息需要的内存空间,同样,分区数最大需要内存空间不能超过服务器内存。查看kafka配置,默认单条消息最大1M,当单条消
数据存储结构是主要原因,还有就是kafka只支持pull模式。而rocketmq有pull、push两种模式 (虽然这个迟也就高了。
NIO概念同步非阻塞,每个请求对应一个socketchannel通道数据通过bytebuffer来传输,所有的socketchannel注册到selector选择器上reactor线程池从轮询来处理请求调用select poll epoll函数来获取数据,获取后的数据交给worker线程池来进行参数验证和信息封装,业务线程再去读取数据进行写入,每个线程池负责不同的内容相互不影响来提升并发。
消息消费失败,很多框架会自动执行重试,而重试就产生了重复消息。MQTT协议给出三种传递消息时能够提供的1 服务质量(Quality of Service)从低到高:1.1 QoS 0:At most once消息最多传递一次,如果当时客户端不可用,则会丢失该消息。即消息在传递时,最多被送达一次。无消息可靠性保证,允许丢消息。一种 “fire and forget” 的消息发送模式:Sender (
Hadoop几个主要产品的架构都是一主多从。HDFS,一个NameNode,多个DataNode;MapReduce 1,一个JobTracker,多个TaskTracker;Yarn,一个ResourceManager,多个NodeManager。Storm,一个Nimbus,多个Supervisor;Spark,一个Master,多个Slave。大数据因为要对数据和计算任务进行统一管理,所以和
动机一种常见的重复代码:一个数据结构的使用者都在检查某个特殊的值,并且当该特殊值出现时所做的处理也都相同。若发现项目中有多处以同样方式应对同一个特殊值,我就会想要把这个处理逻辑收拢到一处。 处理这种情况的一个好办法是使用“特例”(Special Case)模式:创建一个特例元素,用以表达对这种特例的共用行为的处理。这样我就能用一个函数调用取代大部分特例检查逻辑。特例有几种表现形式:若只需从该对象读
1 动机复杂的条件逻辑是编程中最难理解的东西之一,因此我一直在寻求给条件逻辑添加结构。很多时候,我发现可以将条件逻辑拆分到不同的场景(或者叫高阶用例),从而拆解复杂的条件逻辑。这种拆分有时用条件逻辑本身的结构就足以表达,但使用类和多态能把逻辑的拆分表述得更清晰。 2 常见场景2.1 构造一组类型,每个类型处理各自的一种条件逻辑例如,我会注意到,图书、音乐、食品的处理方式不同,这是因为它们分属不同类
Hadoop主要组成分布式文件系统HDFS分布式计算框架MapReduce分布式集群资源调度框架YarnYarn的出现伴随着Hadoop的发展,使Hadoop从一个单一的大数据计算引擎,成为一个集存储、计算、资源管理为一体的完整大数据平台,进而发展出自己的生态体系,成为大数据的代名词。在MapReduce应用程序的启动过程中,最重要的就是把MapReduce程序分发到大数据集群的服务器,Hadoo
1 简介Istio,希腊语,意扬帆起航。一个完全开源的服务网格产品,对分布式应用是透明的。Istio 管理服务之间的流量,实施访问政策并汇总遥测数据,而不需要更改应用代码。Istio 以透明的方式对现有分布式应用进行分层,从而简化了部署复杂性。也是一个平台,可与任何日志、遥测和策略系统集成。服务于微服务架构,并提供保护、连接和监控微服务的统一方法。在原有的数据平面的基础上,增加了控制平面。为什么会
架构 UML1 单线程写Disruptor的RingBuffer, 之所以可以做到完全无锁,也是因为"单线程写",这是所有"前提的前提",离了这个前提条件,没有任何技术可以做到完全无锁。Redis、Netty等等高性能技术框架的设计都是这个核心思想。2 系统内存优化-内存屏障实现无锁,还需一个关键技术:内存屏障。对应到Java语言,就是valotile变量与happens before语义。 参阅
动机条件表达式通常有两种风格:两个条件分支都属于正常行为只有一个条件分支是正常行为,另一个分支是异常情况这两类条件表达式有不同用途,这一点应该通过代码表现出来:若两条分支都是正常行为,就应该使用形如if...else...的条件表达式若某个条件极其罕见,就应该单独检查该条件,并在该条件为真时立刻从函数中返回这样的单独检查常常被称为“卫语句”(guard clauses)以卫语句取代嵌套条件表达式的
1 概述源于Google的MapReduce论文,发表于2004年12月。Hadoop MapReduce是Google MapReduce的克隆版。Hadoop问世前,已有分布式计算,但都是专用系统,仅处理某一类计算,比如进行大规模数据排序。这样的系统无法复用到其他大数据计算场景,每种应用都需要开发与维护专门系统。而Hadoop MapReduce造就了大数据计算通用编程。只要遵循MapRedu
HDFS1 概述1.1 简介Hadoop实现的一个分布式文件系统(Hadoop Distributed File System),简称HDFS源自于Google的GFS论文,发表于2003年,HDFS是GFS的克隆版大数据中最宝贵、最难以代替的就是数据,一切都围绕数据。HDFS是最早的大数据存储系统,存储着宝贵的数据资产,各种新算法、框架要想得到广泛使用,必须支持HDFS,才能获取已存储在里面的数
1 动机有时发现这样一串条件检查:检查条件各不相同,最终行为却一致。这时就该使用“逻辑或”和“逻辑与”将它们合并为一个条件表达式:合并后的条件代码会表述“实际上只有一次条件检查,只不过有多个并列条件需要检查,从而使这一次检查的用意更清晰。当然,合并前和合并后的代码有着相同的效果,但原先代码传达出的信息却是“这里有一些各自独立的条件测试,它们只是恰好同时发生”这项重构往往可以为使用【提炼函数】做好准
1 动机程序中复杂的条件逻辑导致我我必须编写代码来检查不同的条件分支,根据不同条件做不同的事,然后,我很快就会得到一个相当长的函数。大型函数本身就会降低代码可读性,而条件逻辑则会使代码更难阅读。带有复杂条件逻辑的函数中,代码(包括检查条件分支的代码和真正实现功能的代码)会告诉我发生的事,但常常让我弄不清楚为什么会发生这样的事, 说明代码可读性的确大大降低。 和任何大块头代码一样,我可以将它分解为多
一个数据结构中可能包含多个记录,而这些记录都关联到同一个逻辑数据结构。例如,我可能会读取一系列订单数据,其中有多条订单属于同一个顾客。遇到这样的共享关系,既能将顾客信息作为值对象看待,也能将其视为引用对象:若将其视为值对象,则每份订单数据中都会复制顾客的数据若将其视为引用对象,对于一个顾客,就只有一份数据结构,会有多个订单与之关联若顾客数据永不修改,则两种方式都合理。 把同一份数据复制多次可能会造
某个类做了应该由两个类做的事。建立一个新类,将相关的字段和函数从旧类移到新类。动机一个类应该是一个清楚的抽象,处理一些明确的责任。但实际工作中,类会不断扩展。你会在这儿加入一些功能,在那儿加入一些数据。给某个类添加一项新责任时,你会觉得不值得为这项责任分离出一个单独的类。于是,随着责任不断增加,这个类会变得过分复杂。很快,你的类变成一团乱麻。这样的类往往含有大量函数和数据,太大而不易理解。此时你需
?推荐大家关注一个公众号?曾就职于百度、携程、华为等大厂,六年Java开发经验。CSDN博客专家,阿里云社区专家博主,华为云社区专家博主,慕课网认证作者,掘金人气作者,牛客网著有《Java源码面试解析指南》。  
1 案例引入某系统需要对特定的大量用户推送一些消息:促销活动让你办卡有个特
实现字符串池线程安全实现String可以创建HashCode不可变性final可以修饰类,方法和变量,并且被修饰的类或方法,被final修饰的类不能被继承,即它不能拥有自己的子类,被final修饰的方法不能被重写,final修饰的变量,无论是类属性、对象属性、形参还是局部变量,都需要进行初始化操作。在了解final的用途后,在看String为什么要被final修饰:主要是为了”安全性“和”效率“的
大家接手的祖传代码都是屎山,那么何时重构、何时停止?如何删除一个实例变量、如何产生一个继承体系,相信你也都会,因为本就简单,但要你解释何时做这些动作呢?你好像不那么轻松应答了呢。编程不仅是一门艺术,也是需要科学的说服力。我们看过很多很多代码,观察这些代码时,我们学会了从中找寻某些特定结构,这些结构指出了重构的可能性。谁都无法给你一个何时必须重构的精确衡量标准。但经验看来,没有任何规矩比经验丰富大佬
由于DB占用空间太大,我删除了大表的一半数据,可为啥这表文件的大小没变?数据库表的空间回收到底是怎么做的呢?InnoDB表包含:表结构定义(所占空间小)表数据(重点)MySQL版本:<8.0,表结构存在于.frm后缀文件里8.0,允许将表结构定义放在系统数据表。为何直接删除表数据无法回收表空间?如何正确回收空间?1innodb_file_per_table表数据既能存在于共享表空间也能是单独的文件
sortbuffer、内存临时表和joinbuffer,都是用来存放语句执行过程中的中间数据,以辅助SQL语句的执行。在排序的时候用到了sortbuffer,在使用join语句的时候用到了joinbuffer。union执行流程示例表!(https://s4.51cto.com/images/blog/202203/24235857_623c9541a00ae58662.png?xossproce
1前言实体是领域模型中的领域对象。官方解释:实体是指描述了领域中唯一的且可持续变化的抽象模型。通常建模时:名词用于给概念命名形容词用于描述这些概念而动词则表示可以完成的操作白话解释:实体就是对象的方法和属性实现业务逻辑的类,一般由唯一标识id和值对象组成,属性发生改变,可影响类的状态和逻辑。MVC开发人员总将关注点放在数据,而非领域。因为在软件开发中,DB占据主导地位。他们首先考虑数据的属性(即表
Copyright © 2005-2025 51CTO.COM 版权所有 京ICP证060544号