专注分布式消息中间件和存储系统
Pulsar-Consumer “Pulsar is a distributed pub-sub messaging platform with a very flexible messaging model and an intuitive client API.” Pulsar是pub-sub模式的分布式消息平台,拥有灵活的消息模型和直观的客户端API。
“Pulsar is a distributed pub-sub messaging platform with a very flexible messaging model and an intuitive client API.” Pulsar是pub-sub模式的分布式消息平台,拥有灵活的消息模型和直观的客户端API。
这周RocketMQ发布了4.3.0版本,New Feature中最受关注的一点就是支持了事务消息: 今天花了点时间看了下具体的实现内容,下面是简单的总结。 RocketMQ事务消息概要 通过冯嘉发布的《RocketMQ 4.3正式发布,支持分布式事务》一文可以看到RocketMQ采用了2PC的方案来提交事务消息,同时增加一个补偿逻辑来处理二阶段超时或者失败的消息。
Apache Pulsar What is Pulsar "Pulsar is a distributed pub-sub messaging platform with a very flexible messaging model and an intuitive client API." Pulsar是pub-sub模式的分布式消息平台,拥有灵活的消息模型和直观的客户端API。
当我们说顺序时,我们在说什么? 日常思维中,顺序大部分情况会和时间关联起来,即时间的先后表示事件的顺序关系。 比如事件A发生在下午3点一刻,而事件B发生在下午4点,那么我们认为事件A发生在事件B之前,他们的顺序关系为先A后B。
将成员变更纳入到算法中是Raft易于应用到实践中的关键,相对于Paxos,它给出了明确的变更过程(实践的基础,任何现实的系统中都会遇到因为硬件故障等原因引起的节点变更的操作)。 显然,我们可以通过shutdown集群,然后变更配置后重启集群的方式达到成员变更的目的。
前言 之前的两篇文章更多的是在描述Raft算法的正常流程,没有过多的去讨论异常场景。 而实际在分布式系统中,我们更多的都是在应对网络不可用、机器故障等异常场景,所以本篇来讨论一下Raft协议的安全性,即在异常场景下是否会导致数据丢失、数据不一致等情况。
Leader election Raft采用心跳机制来触发Leader选举。Leader周期性的发送心跳(如果有正常的RPC的请求情况下可以不发心跳)包保持自己Leader的角色(避免集群中其他节点认为没有Leader而开始选举)。
最近工作中讨论到了Raft协议相关的一些问题,正好之前读过多次Raft协议的那paper,所以趁着讨论做一次总结整理。 我会将Raft协议拆成四个部分去总结: 算法基础 选举和日志复制 安全性 节点变更 这是第一篇:《解读Raft(一 算法基础)》 什么是RAFT 分布式系统除了提升整个体统的性能外还有一个重要特征就是提高系统的可靠性。
Motivation 《Time, Clocks, and the Ordering of Events in a Distributed System》大概是在分布式领域被引用的最多的一篇Paper了。
什么是定时消息和延迟消息? 定时消息:Producer 将消息发送到 MQ 服务端,但并不期望这条消息立马投递,而是推迟到在当前时间点之后的某一个时间投递到 Consumer 进行消费,该消息即定时消息。
最近一直在关注阿里的一个开源项目:OpenMessaging OpenMessaging, which includes the establishment of industry guidelines and messaging, streaming specifications to pr...
本来这个公众号的交流消息中间件相关的技术的。上周去上海参加了QCon,第一次参加这样的技术会议,感受挺多的,所以整理一下自己的一些想法接公众号和大家交流一下。 三天的内容还挺多的,原计划分上下两篇总结一些自己听的分享的,发现内容太长所以又拆出了中篇,下面进入正题。
本来这个公众号的交流消息中间件相关的技术的。这周去上海参加了QCon,第一次参加这样的技术会议,感受挺多的,所以整理一下自己的一些想法接公众号和大家交流一下。 下面进入正题,从自己参加了的一些分享中挑一些有趣的议题来和大家讨论。
在写完上一篇《Pull or Push》之后,原本计划这一片写《存储层设计》,但是临时改变主意了,想先写一篇介绍一下消息中间件最最基础也是最核心的部分:write-ahead logging(WAL)。
采用Pull模型还是Push模型是很多中间件都会面临的一个问题。消息中间件、配置管理中心等都会需要考虑Client和Server之间的交互采用哪种模型: 服务端主动推送数据给客户端? 客户端主动从服务端拉取数据? 本篇文章对比Pull和Push,结合消息中间件的场景进一步探讨有没有其他更合适的模型。
接上一篇《消息中间件核心实体(0)》,这一篇继续介绍消息中间件中的一些实体。 上一篇主要是Message、Topic、TopicMeta和Queue这样最基础的实体,这几篇介绍一些发送和消费的过程中会涉及到的实体和组件。
消息中间件核心实体(0) 最近两周在做的一个新项目,一个主从复制的组件,这两天刚跑通测试。 从之前讨论的架构来说,消息中间件也是有主从复制这个模块的,像Rocket就支持主从模式。 在做这个项目之前已经写过两个版本的主从复制模块,基本思路是: Slave主动和Master建立链接 Sla...
接之前几篇消息中间件组件的模块划分,本篇内容讲述消息的写入和读取流程。 消息的队列模型 队列模型 在描述消息的写入和读取流程之前,首先要弄清楚消息队列的模型是怎么样的,包括消息是怎么存储的。
上图是之前讨论确定的系统架构(后续内容会按照这个架构来叙述),其中: NameServer做Broker的服务发现,即客户端可以通过NameServer拿到Broker的信息 Broker汇报数据到NameServer NameServer的模块划分 在进行N...
上图是之间讨论确定的系统架构(后续内容会按照这个架构来叙述),其中: 客户端包含Producer和Consumer两大块 客户端需要和NameServer交互来获取元数据 客户端需要和Broker交互来读写消息 Client模块划分 1. 网络模块 第一个仍然是网络模块。
本篇在上一篇《消息中间件架构讨论》的基础上分析Broker的模块划分。 上图是之前讨论确定的系统架构(后续内容会按照这个架构来叙述),几点基础: Broker采用主从结构 Broker负责持久化元数据并汇报到NameServer Client从NameServer获取元数据,然后从Broker读取消息 Broker的模块划分 1 网络模块 Broker需要和NameServer及Client通信,包括Broker之间也需要通信(主从结构),所以Broker会有一个模块(Net&PacketHandler)用于所有网络包的处理。
前言 接上一篇的《业务方对消息中间件的需求》,在可用性和可靠性的基础上,讨论各种架构的优缺点,最后给出自己关于消息中间件的架构思考。 Kafka 首先还是来看Kafka的系统架构(做消息中间件逃不开要去了解Kafka)。
Netty的ByteBuf是JDK中ByteBuffer的升级版,提供了NIO buffer和byte数组的抽象视图。 ByteBuf的主要类集成关系: (图片来自Netty权威指南,图中有一个画错的地方是PooledByteBuf中的最后一个子类应该是PooledUnsafeDirectByteBuf) 从继承关系可以看出AbstractReferenceCountedByteBuf的子类分为两类:Pooled和Unpooled的ByteBuf。
在大型互联网中,主要采用消息中间件来进行业务的解耦和操作的异步化,这也是消息中间件最基础的特点,也是业务系统对消息中间件的最基本需求。 在这个基础之上,本篇来谈一下业务系统从功能、性能等各个方面对消息中间件的需求。
接上一篇的《什么是分布式消息中间件?》,这一篇来介绍一下消息中间件相关的一些概念和专业术语。 Topic 主题,从逻辑上讲一个Topic就是一个Queue,即一个队列;从存储上讲,一个Topic存储了一类相同的消息,是一类消息的集合。
在进行数据传输的时候,往往需要使用到缓冲区,常用的缓冲区就是JDK NIO类库中提供的java.nio.Buffer,实现类如下: 在使用NIO编程时,最常用的是其中的ByteBuffer,本篇分析ByteBuffer内部的源码实现,顺序从父类Buffer入手,了解父类中基础API的实现,再到各个实现子类的实现。
IMPLEMENTATION 1. API Design Producer APIs Producer API封装了底层两个Producer: kafka.producer.SyncProducer kafka.
什么是分布式消息中间件? 对于分布式消息中间件,首先要了解两个基础的概念,即什么是分布式系统,什么又是中间件。 分布式系统 “A distributed system is one in which components located at networked computers ...
简介 Kafka擅长于做什么? 它被用于两大类应用: 在应用间构建实时的数据流通道 构建传输或处理数据流的实时流式应用 几个概念: Kafka以集群模式运行在1或多台服务器上 Kafka以topics的形式存储数据流 每一个记录包含一个key、一个value和一个time...
原文:https://www.ibm.com/developerworks/library/j-zerocopy/ 《Efficient data transfer through zero copy》 本文描述通过一种叫做Zore Copy的技术来提升运行在Linux和UNIX上的Java程序的IO性能。
什么是对象池技术?对象池应用在哪些地方? 对象池其实就是缓存一些对象从而避免大量创建同一个类型的对象,类似线程池的概念。对象池缓存了一些已经创建好的对象,避免需要时才创建对象,同时限制了实例的个数。
继上一次查应用的CPU飙高问题(http://www.cnblogs.com/hzmark/p/JVM_CPU.html)过去10天了。上次只是定位到了是一个第三方包占用了大量的CPU使用,但没有细致的去查第三方包为什么占用了这么高的CPU,并且内存为什么如此诡异。
LZ开发的一个公司内部应用供查询HIVE数据使用。部署上线后总是会出现CPU偏高的情况,而且本地测试很难重现。之前出现几次都是通过直接重启后继续使用,因为是内部使用,重启一下也没有很大影响(当然,每次重启都是顺带改改BUG,添加一些监控,或者修改了一些参数)。
工作中经常要用到的一些东西,一直没整理,用的多的记住了,用的不多的每次都是去查,所以记录一下。 DDL(数据定义语言),那就包括建表,修改表结构等等了 建表:create hive table 1 hive> CREATE TABLE pokes (foo INT, bar STRING); 创建一个名为pokes的表,包括两个字段,第一个字段foo是整型,第二个字段bar是字符串。
说来惭愧,第一次听说Memcache是在大约在6个月前。作为一个搞J2EE开发的,工作一年多了,都没听说过Memcache实在是惭愧。 当时是换了新工作,第一个任务是开发一个报表系统供公司内部使用。为了使系统能7*24小时提供服务,老大说搞两台服务器吧,然后弄个Memcache。
昨天写下了这篇博客(http://www.cnblogs.com/hzmark/p/131003Release.html),今天有时间,就这里一下第一篇内容。 换工作公司开发平台: WINDOWS+Velocity+JAVA+Spring+Ibatis+Oracle 还有就是基于架构师的那套框架,打包发布用的ANT。
当我们安装好并正常运行hdfs后输入http://xxxxxxxxx:50070会进入下图所示的页面。 其中Browse the filesystem 是查看文件系统的入口。 但是在发现这个链接一直无效。
几个月前做一个项目,就自己一个人。 每个项目都会用到分页,就和老大确认了一下要怎么样的分页,是“首页、上一页、下一页、末页、去X页”这种“老式”的还是和博客园首页的分页一样的,然后他选择了后者。 项目也就两周时间,所以必须用最快最方便的方式去实现,所以考虑了要不要网上直接拉一个(这种分页的网上肯定有很多)。
每次做项目都会遇到字符串的处理,每次都会去写一个StringUtil,完成一些功能。 但其实每次要的功能都差不多: 1.判断类(包括NULL和空串、是否是空白字符串等) 2.默认值 3.去空白(trim) 4.比较 5.字符类型判断(是否只包含数字、字母) 6.大小写转换(首字母大小写等) 7.字符串分割 8.字符串连接 9.字符串查找 10.取子串 11.删除字符 12.字符串比较 下面是一个字符串的工具类,涵盖了上面列的功能,算是比较完整的。
Hive权限控制 Hive权限机制: Hive从0.10可以通过元数据控制权限。但是Hive的权限控制并不是完全安全的。基本的授权方案的目的是防止用户不小心做了不合适的事情。 先决条件: 为了使用Hive的授权机制,有两个参数必须在hive-site.
本文实现两个数据库同步,分为主从模式和相互备份模式。 实施环境: 两台Linux机器 SerA ip:10.0.0.232 SerB ip:10.0.0.234 Demo1:主从模式 Master:SerA Slave:SerB 在SerA和SerB上分别建立用于同步的账号(也...
http://smallq.iteye.com/blog/1161319 1.首先安装cmake Java代码 # wget http://www.cmake.org/files/v2.
从年后换了工作到现在差不多两个月了,比较忙,所以写博客的时间越来越少了。 以前学生时代用MySQL,从安装开始就是“下一步”,设置向导弄中设置用户、端口、编码什么的就好了。后来工作了公司用的Oracle,但是普通程序员也接触不到。
以前一直时在windows环境下开发,下载转到Linux环境了,各种杂七杂八的问题一堆。 今天记以下MySQL的安装、密码修改、远程登录的内容吧,好记性不如烂笔头。 http://dev.mysql.
Hadoop安装配置手册 一、 准备篇 Hadoop运行环境: SSH服务正常运行 JDK 没安装的可以自己安装一下。 二、 基础篇(单节点Hadoop) Hadoop下载 Hadoop下载页:http://hadoop.
原文:http://tonymomo.pixnet.net/blog/post/62329497 1 package org.apache.hadoop.examples; 2 3 import java.
前一段时间写的关于集合类源码分析的博客中其实一直没有提到两个方法,那就是writeObject和readObject方法。这两个方法涉及到序列化的内容,这篇博文总结遇到过的和序列化相关的内容。
与顺序编程不同,并发使程序可以在“同一时间”执行多个操作。 Java对并发编程提供了语言级别的支持。Java通过线程来实现并发程序。一个线程通常实现一个特定的任务,多个线程一起执行的时候就实现了并发。
注解目前非常的流行,很多主流框架都支持注解,而且自己编写代码的时候也会尽量的去用注解,一时方便,而是代码更加简洁。 注解的语法比较简单,除了@符号的使用之外,它基本与Java固有语法一致。