top命令使用说明

1. 介绍

top命令是一个比较常用的LINUX命令。本文对其使用做简单介绍。

2. 内容理解

一个典型的top视图如下:

第一行

18:25:43 up # 系统当前时间

121 days # 系统运行时间

1 users # 系统当前登录用户数......

kafka producer性能调优

1. 介绍

原文来自linkedin的一篇PPTproducer-performance-tuning-for-apache-kafka。

2. 本文的一些前提

讨论的kafka版本为0.10.0

没有broker端的再压缩

消息都有8字节的时间戳介绍信息

3. 优化目标

给定一个要发送的数据集,在满足持久性、有序性的前提下优化以下两点:

吞吐量

延迟

优化专注于优化平均性能,这样对所有的producer都有效。

4. kafka producer原理回顾

4.1 生产者的关键配置

batch.size: 基于大小的batching策略

linger.ms: 基于......

网络通讯之长连接、长轮询、短轮询理解

1. 介绍

标题中几个关键字在平常经常见到。本文小作总结。注意本文讨论的轮询均指网络通信中的“轮询”,请区别下CPU轮询。

2. 长连接

2.1 介绍

一般我们说长连接,主要描述的对象是一个TCP请求连接。当一个TCP通道一直保持着连接状态,即称这个连接为长连接。现在的HTTP1.1协议都使用的长连接,可以看到http报文5头部的connection为keep-alive,即为长连接。使用长连接和不使用长连接的效果对比下图:

优点:节约频繁创建连接的开销......

http协议和websocket协议的区别

1. 介绍

websocket和http都属于应用层协议,网络层都基于TCP协议。

PS:

虽然TCP协议是全双工的协议,但是应用层不一定是全双工的(看具体实现)

websocket和socket是两个东西:Socket是一个针对TCP和UDP编程的接口。应用程序通过它来发送和接收数据,借助它建立TCP连接等等。这里需要重点说明的,socket不是一个协议,只是一个编程接口。当然,websocket也用到了socket接口来实现其协议。

2. websocket

websocket的特点主要如下:

全双工协议:http协议基于请求应答,现在只能做单向传输,是半双工协议;web......

zookeeper vs Eureka

1.介绍

现在提到做服务发现、分布式协调同步可以想到很多工具:zookeeper、eureka、etcd、Consul(直接集成了服务发现的系统,不用自己实现)等等。很多时候选择哪一个,关键是看对CAP的选择。

本篇主要简单讨论下zk和eureka这两个。

2. 关于服务发现

根据 服务发现方案梳理及NetflixEureka简介一文可知,做分布式下的服务发现还是使用eureka更好,也就是AP特性的分布式协调工具。

在我们的讨论中, zk就是CP类工具......

zookeeper滚动日志设置

1. 介绍

默认启动ZK会有一个zookeeper.out作为ZK日志输出的地方。时间久了就会形成一个非常大的文件,也不利于查看日志。所以这里说下如何设置ZK的滚动日志。

2. 设置滚动日志

2.1 修改/bin/zkEnv.sh

配置ZOO_LOG_DIR的环境变量,ZOO_LOG_DIR是zookeeper日志输出目录,ZOO_LOG4J_PROP是log4j日志输出的配置:

if [ "x${ZOO_LOG_DIR}" = "x" ]

then

ZOO_LOG_DIR="/home/appadmin/zookeeper-3......

java中的future和completableFuture区别

1. 介绍

java自带的实现任务异步执行的API主要就是future和completableFuture。这里简单介绍下。

2. future

future是JAVA5就引入的。主要是创建一个线程池,然后提交Runnable或者Callable的任务。然后可以用get来获取返回结果(执行完毕才会返回)

优点:一定程度上让一个线程池内的任务异步执行了

缺点:回调无法放到与任务不同的线程中执行。传统回调最大的问题就是不能将控制流分离到不同的事件处理器中。例如主线程等待各个异步执行的线程返回的结果来做下一步操作,则必须阻塞在future.get()的地方等待结果返回。这时候又变成同步了。

......

kafka集群间的数据同步和数据转移

1. 介绍

有时候需要跨集群之间的数据同步和数据迁移的需求。这个可以利用官方提供的工具:官方文档的6.1 Basic Kafka Operations

2. 原理说明

这个工具就是启动了一个消费者从源集群消费数据,然后交给一个生产者往目标集群发送消息。

3.使用技巧以及注意点

3.1 使用技巧

开启多个mirror maker进程:mirror maker进程可以同时开启多个,提高吞吐量。如果其中一个进程挂了,其他线程还能接管其同步任务。

3.2 ......

基于idea的golang开发环境搭建

1. 介绍

golang优秀的开源项目挺多,抽点空也准备学习下golang。这里就简单介绍下如何用idea搭建golang开发环境

2. 基本准备

2.1 go

到go官网下载最新的安装包安装。解压后配置下环境变量GOPATH(工作目录)和GOROOT(GO的安装目录)

我的配置是这样的:

GOPATH=C:\Go\

GOROOT=C:\GoProjects;C:\GoProjects\src\docker;C:\GoProjects\src\learning

关于GOROOT的设置可以看下第三节的“项目组织”

2.2 idea

idea安装go插件。这个搜索下插件安装即可。......

设置代理解决Git、IDEA、GO get等各种下载问题

1. 介绍

作为中国程序员,总没法避免要使用科学上网。有些小伙伴已经成功科学上网,但是仍然在使用git clone、idea下载插件或者go get的时候没法成功下载。本篇就简单以3个例子来介绍下如何配置代理来解决下载问题。

我们不讲解如何科学上网,所以前提是你已经弄好了ss。我这边的SS本地端口是1080。

2. git

git config –global http.proxy “127.0.0.1:1080”

git config –global https.proxy “127.0.0.1:1080”

然后可以愉快使用git clone了

3. IDEA

ctrl+alt......

kafka集群YGC问题排查

1. 介绍

最近kafka集群总是有偶发的YGC问题。今天上午花了点时间好好研究了下。

2. 现状

我们的kafka集群用的是kafka官方的推荐配置。server配置参考kafka官方文档第六章来配置。另外我们的硬件环境比Linkedin用的机器还好点,40核,60G内存。

3. YGC问题回顾

YGC出问题后可以查看下kafka服务器上的GC日志,在KAFKA_HOME/logs/kafkaServer-gc.log

可以看到GC日志:

主要信息是:

......

spark streaming消费kafka消息的两种方式对比

1. 介绍

spark streaming去消费kafka消息相信是一种比较常见的情景。一般来说获取kafka消息的spark streaming流有以下两种:

基于Receiver的流(传统老方法)

Direct Stream(推荐的新方法)

本文主要参考官方文档Spark Streaming + Kafka Integration Guide (Kafka broker version 0.8.2.1 or higher)和Spark Streaming + Kafka Integration Guide (Kafka broker version 0.10.0 or highe......

第2章:Docker基础

1. docker安装

书本P424有各个linux发行版、MAC OS、WIN下的docker安装教程。这里以REHL 7为例,说明下安装方式。

#1. 更新系统

sudo yum update

#1. 添加yum仓库

tee /etc/yum.repos.d/docker.repo << 'EOF'

[dockerrepo]

name=Docker Repository

baseurl=https://yum.dockerproject.org/repo/main/centos/7/

enabled=1

gpgcheck=1

gpgkey=https://yu......

第1章:从容器到容器云

本系列是书《Docker容器与容器云》的读书笔记。

1. 云计算平台

掌握云计算的三层架构即可,IaaS、PaaS、SaaS

2. 容器,新的革命

讲了下docker发展史,了解下就好。

重点提了下容器技术的好处:

2.1 持续部署和与测试

容器消除了线上线下的环境差异,保证了应用生命周期的环境一致性和标准化。开发人员使用镜像实现标准开发环境的构件,开发完成后通过封装着完整环境和应用的镜像进行迁移,由此,测试和运维人员可以直接部署软件镜像来进行测试和发布,大大简化了持续集成、测试和发布的过程。

2.2 跨云平台支持

支持适配各类IaaS平台。有着良好的生态。

大规模数据存储查询解决方案总结

1. 介绍

这个信息时代,每天都有大量数据产生。这对我们的技术也提出了新的挑战。今天简单看了点东西做了点总结。

2. 发展史

单纯从时间线来看,数据存储经历了 RDBMS->NoSQL->NewSQL

下面我们就以这三个类别来讨论。

PS: 我将不支持ACID特性的的都归纳到NoSQL哦,比如说ES。

3. RDBMS

RDBMS已经存在几十年了,非常成熟稳定。所以无论选择啥存储方案,一般都仍然会使用RDBMS做主存储。而且绝大部分场景,可以通过以下方式来提升RDBMS的查询效率:

建索引:合理的建和使用索引,查询亿级别的数据,控制在1秒内不成问题

分库分表:可以......

java8的新特性以及用法简介

1. 介绍

本文简单介绍下java8里面有哪些新的特性,以及相关的用法。

JAVA8是意义深远的一个新版本。随着大数据的兴起,函数式编程在处理大数据上的优势开始体现。JAVA8也紧跟时代,引入了函数式语言的特性,值得关注。下面看看其有哪些新的内容。

2 接口的默认方法

Java 8允许我们给接口添加一个非抽象的方法实现,只需要使用 default关键字即可,这个特征又叫做扩展方法。JAVA可以实现多个接口,从而来对原本的类进行方法扩展。JAVA只能继承1个类,所以以前的接口没法提供这种灵活的扩展方法。现在要简单的扩展方法,也不需要使用Spring的代码织入了,直接用扩展方法即可。不过横......

java5、java6、java7、java8、java9新特性

1. 介绍

JAVA作为使用的主力语言,掌握下其历史发展也是有必要的。看看从JAVA5开始到现在的JAVA9有哪些变化。借此机会,也可以看看哪些特性我们是已经用到的,哪些是还没有用到的。

我们在IDEA里面也可以看到language level里面的信息,这里也大致写了下各个版本JDK的新特性。

简单概括下就是:

JAVA1.3:普通的原始的JAVA,基本语法相信大家都见过了

JAVA1.4:assert关键字

JAVA5......

云计算中的IaaS、PaaS和SaaS

1. 云服务

上面提到的都可以统一称为云服务。其简单定义为:

IaaS: 基础设施即服务,例如提供基础的云服务器(包括完整的CPU、内存网络等基本硬件)。灵活性最好。

PasS: 平台即服务,例如提供了整合好各类中间件的云平台。例如阿里云,当然阿里云也同样是IaaS。灵活性相比IaaS差点,自己修改的约束也会多些。

SaaS:软件即服务。这个普通用户接触最多了,比如使用的百度网盘、网易云音乐都可以算。这个就没修改的余地了,已经发布的产品

三种云服务Iaas是离普通用户最远的,而SaaS是离普通用户最近的,PaaS在中间。

2. 三种服务差别

主要差别可以参考下图:

再谈分布式场景下的一致性

1. 介绍

之前也写过一些文章总结分布式场景下的一致性处理:

最终一致性的保证策略

分布式事务的典型处理方式:2PC、TCC、异步确保和最大努力型

事务与分布式事务原理与实现2(笔记)

从分布式数据复制一致性问题到paxos算法的理解(第一部分)

从分布式数据复制一致性问题到paxos算法的理解(第二部分)

今天群里小伙伴,拿着paxos的论文来文一致性问题,正好我也借机复习了下。本文将以比较简单的语言总结下分布式场景下如何处理一致性。本文不介绍具体的实现细节,侧重在实用的解决方案上。

2. 分布式一致性的三种需求场景

分布式对一致性有需求的场景可以归纳为两种:

数据副本的一......

Spark cluster mode和client mode原理浅析

1. 介绍

Spark运行JOB主要有两种模式:

cluster mode: Spark driver在 application的master process中运行。如果和YARN集成,则application master process由YARN管理,在YARN中运行。

client mode:Spark driver在clinet process中运行。如果集成YARN,application master只负责从YARN请求资源。

由此可见,两种模式分别代表了瘦客户端(cluster mode)或者是瘦服务器(client mode)两种模式。

本文主要介绍下cluster......

使用ignite成倍提升Mapreduce Job性能

1. 介绍

在之前我写的Ignite In-Memory Hadoop Accelerator安装使用这篇文章中我已经介绍了如何安装Ignite In-Memory Hadoop Accelerator。

为了达到添加一个内存缓存层来加速MR JOB的目的,我们使用的是Ignite In-Memory Hadoop Accelerator(下文我就简称IHA了)。这里注意区别下ignite的data fabric组件。

2. 注意事项

2.1 集成yarn的问题

使用IHA也就意味着由ignite来管理MR任务的调度执行了。因为ignite自己实现了native的ignite MR框......

Ignite In-Memory Hadoop Accelerator安装使用

1.介绍

ignite在ignite简介一文中已经做了介绍。其功能非常多,我们主要把其功能分为两块:

In-Memory Data Fabric

In-Memory Hadoop Accelerator

从官方文档上也可以看到,官方也主要把ignite分成这两个较为独立的模块:

Ignite In-Memory Hadoop Accelerator(请允许我以后都简称IHA)主要是通过提供一个内存存储系统和......

alluxio vs ignite

前段时间一直在研究alluxio,不过alluxio似乎不太适合我们的使用场景。具体可以参考文章:采用alluxio提升MR job和Spark job性能的注意点来了解alluxio的应用场景。

这里并不是说alluxio不好。alluxio在符合其使用的场景下也有非常显著的性能提升。在国内也有百度、去哪儿、阿里这样的公司来使用。不过作为内存缓存层加速本地的spark或者mapreduce job方面可能并不是做的很完善。

ignite的开发者和alluxio的开发者也有过交集。和我标题一样的问题ignite的作者也同样问过。具体可以参考:

敢说 Apache Ignite 比 Ta......

ignite简介

1. 前言

前段时间一直在研究alluxio。不过alluxio似乎不太适合我们的使用场景。我们的需求就是想要有一个能无缝集成Hadoop和Spark的内存缓存层来加速每个本地运行的job。关于alluxio的研究可以查看我alluxio分类下的文章。关于为什么alluxio不适合内存缓存加速job的场景可以参考我的文章:采用alluxio提升MR job和Spark job性能的注意点

本文主要介绍下ignite。主要参考文档:

Apache Ignite(V1.7.0)中文开发手册

ignite官网

ignite-github

PS: 强烈推荐看ignite-github上面......

Memory Storage Support in HDFS

1. 前言

利用内存已是大势所趋。Spark的基于内存的计算就是一个很好的利用内存的例子。hadoop现在的架构也在做调整,学习spark的思路。架构设计上也越来越多的利用内存。例如在hadoop 2.6以后,HDFS就开始支持将数据存到内存了。本文对该特性做一些介绍。

主要基于hadoop 2.7.2的文档:Memory Storage Support in HDFS

2. 介绍

HDFS也支持往datanode管理的堆外内存写数据了。datanode会异步地将这些数据flush到磁盘上。这样的写入过程称作“Lazy Persist write"。如果一个node在异步持久......

关于树这种数据结构

1. 介绍

今天技术群突然讨论起来树这种数据结构了。我也有些知识点忘了,现在用比较精简的话简单总结下。

2. 二查查找树(BST)

特点:

会不平衡

节点直接的大小关系

3. 自平衡二查查找树(AVL)

AVL可以理解为BST的变种, 可见是在BST基础上加入了自平衡功能

特点:

高度平衡: 这也导致了调整树的开销比较大,不适合频繁地插入删除节点

......

采用alluxio提升MR job和Spark job性能的注意点

1. 介绍

相信很多使用alluxio的同学,都是冲着其memory speed的加速效果而来。我也一样,认为只要用上了alluxio,整合了spark和hadoop就可以轻松把以前的JOB提升数倍的性能。然而,事实并不是这么顺利的。

今天主要就来总结下alluxio在提升MR job和Spark job性能上存在的问题和挑战。

2. 实验说明

2.1 实验环境

后面在说明问题的时候会贴一些实验结果。为了排除网络IO的影响,我这边的实验将hadoop、spark还有alluxio都部署在一台机器上。这台机器内存120G,40核。

2.2 实验方法

主要是做对比实验,一个使用all......

hadoop3.0新特性

1. 前言

PS: 新特性主要翻译自官网:Apache Hadoop 3.0.0-alpha1——Overview

2. 概览

Apache Hadoop 3.0.0-alpha1 在hadoop-2.x的基础上集成了大量的新特性。不过这个alpha版本不能保证API的稳定性,需要注意。

3. 关于JAVA版本

必须使用java8及以上版本才能使用hadoop3.0

4. 支持erasure encoding纠错码

HDFS支持纠编码erasure encoding,简称EC技术。EC技术可以防止数据丢失,又可以解决HDFS存储空间翻倍的问题。劣势是:

一旦数据需要恢复,会......

关于设计前瞻性

公司应用kafka也有一段时间,或多或少都有些问题暴露出来。例如,一开始设计分区数的时候过于保守,导致后续client消费成瓶颈时没法通过增加一个消费者组的线程来增加消费速度了。

这个经验教会我一个道理:

使用一个新的平台也好,中间件也好。对于其性能和瓶颈应该有个前瞻性的规划,这个很重要。例如kafka在设计分区数的时候,应该仔细考虑当前消费者线程的消费能力。考虑未来数据规模增长后,消费者必然需要消费更多的数据从而保证不造成数据堆积。即消费者和生产者之间要保持平衡,不能让消费的比生产的慢,从而影响应用。这个前瞻性的规划应该是较为详细的,可控的。

数据规模的增长,消费者线程数的增加,都是应......

maven setting设置说明

转载自:Maven配置setting.xml详细说明

这里以maven 3.0.4版本为例

<?xml version="1.0" encoding="UTF-8"?>

<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://m......