自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(37)
  • 资源 (1)
  • 收藏
  • 关注

原创 Logstash参数最全详解

Logstash参数与配置Logstash宏观的配置文件内容格式如下:# 输入input { ...}# 过滤器filter { ...}# 输出output { ...}配置文件参考input { # 从文件读取日志信息 file { path => "/var/log/error.log" type => "error"//type是给结果增加一个type属性,值为"error"的条目 .

2020-11-26 02:23:50 12689

原创 ELK、FILEBEAT 日志分析平台搭建

一、ELK介绍1.ELK简介如今,绝大部分系统都是一个分布式的环境,机器分布在不同的环境中。而如果我们需要去查看日志信息,按照以前的方式一台台登录去查看,效率非常低,而且很耗时间。所以这里需要一个集中式的日志存储分析系统。而一个集中式的日志存储系统又以下几个特点:收集-能够采集多种来源的日志数据 传输-能够稳定的把日志数据传输到中央系统 存储-如何存储日志数据 分析-可以支持 UI 分析 警告-能够提供错误报告,监控机制而目前市面上Splunk都满足上述特点,而且非常优秀,但是它是一款

2020-11-25 03:01:50 682

原创 ELK + Filebeat + Kafka 分布式日志管理平台

一.先描述一下使用这种框架搭建平台的工作流程。二.对上面的工作流程进行简单描述。(1)将filebeat部署到需要采集日志的服务器上,filebeat将采集到的日志数据传输到kafka中。(2)kafka将获取到的日志信息存储起来,并且作为输入(input)传输给logstash。(3)logstash将kafka中的数据作为输入,并且把kafka中的数据进行过滤等其他操作,然后把操作后得到的数据输入(output)到es(elasticsearch)中。(4)es(基于lucene

2020-11-25 01:17:04 260

原创 ELK(Elasticsearch + Logstash + Kibana) 极简入门

1. 概述在线上问题排查时,通过日志来定位是经常使用的手段之一,甚至是最有效的。线上服务为了实现高可用往往采用多节点部署,又或者随着项目愈发复杂会考虑微服务架构,导致日志分散在不同的服务器上,导致排查一个问题,需要登录多台服务器,查询在其上的日志,非常繁琐且低效。所以,此时我们需要一个统一的实时【日志服务】,将我们需要的日志全部收集在一起,并提供灵活的查询功能。一般来说,一个完整的日志服务,需要提供如下 5 个功能:1、收集 :能够采集多个来源的日志数据。 2、传输 :能够稳定的把日志数据

2020-11-25 01:03:57 716

原创 Elasticsearch 极简入门

1. 单机部署考虑到阿里云 Elasticsearch 使用 6.7.X 版本,本小节我们基于 6.7.2 版本进行安装部署。前置准备:1、安装 JDK 。2、修改/etc/security/limits.conf,在此配置中增加以下内容。如果服务器已经配置好,可以不用重复配置。需要在 Root 下执行。root soft nofile 65535root hard nofile 65535* soft nofile 65535* hard nofile 6553..

2020-11-25 00:40:50 293

原创 Kafka Streams开发入门(10)

1. 背景介绍了Kafka Streams的时间窗口以及Tumbling Window的实例。这一篇我们利用Kafka Streams中的KTable概念来实时计算一组电影的平均分数。2.功能演示说明这篇文章中我们会创建一个Kafka topic来表示电影打分事件,然后我们编写一个程序实时统计当前电影的平均分数。我们依然使用ProtocolBuffer对消息事件进行序列化。事件的JSON格式如下所示:{"movie_id": 362,"rating": 9.6}{"movie_id..

2020-11-15 10:45:13 241

原创 Kafka Streams开发入门(9)

1. 背景介绍了如何利用Kafka Streams实时统计某年最卖座和最不卖座的电影票房。主要的方法是通过Streams提供的aggregate方法实现了max/min算子。今天我为大家带来时间窗口函数的使用方法。在Kafka Streams中,时间窗口有三类:固定时间窗口(Tumbling Window)、滑动时间窗口(Sliding Window)和会话窗口(Session Window)。我们不详细讨论这三类窗口的定义与区别,而是直接使用一个项目来说明如何利用Tumbling Window定期统计

2020-11-15 10:44:56 314

原创 Kafka Streams开发入门(8)

1. 背景介绍了如何利用Kafka Streams对实时消息流进行汇总求和。本篇将设定一个场景:我们引入一个Kafka topic表示电影票的销售,同时我们基于Kafka Streams编写一个程序来计算每年最卖座的电影票房以及最不卖座的电影票房。2. 功能演示说明假设我们要执行票房统计的topic消息格式如下:{"title":"Avengers: Endgame","release_year":2019,"total_sales":856980506}消息是JSON格式,title是

2020-11-14 21:45:17 222

原创 Kafka Streams开发入门(7)

1. 背景介绍了如何利用Kafka Streams找出并过滤掉实时流中那些重复的消息。本篇将介绍如何对消息中特定数据进行求和汇总。2. 功能演示说明假设我们要执行汇总求和的事件格式如下:{"title":"Die Hard","sale_ts":"2019-07-18T10:00:00Z","ticket_total_value":12}这条事件表示的是电影票的售出信息,其中ticket_total_value是票价。现在我们想要为每部电影实时统计各自的票房。3. 配置项目首先创

2020-11-14 21:31:17 100

原创 Kafka Streams开发入门(6)

1. 背景介绍了merge算子的作用。这一篇介绍如何从一个Kafka Streams中过滤掉那些重复出现的事件,只留下那些唯一的事件。2. 功能演示说明假设我们要执行去重逻辑的事件格式如下:{"ip":"10.0.0.1","url":"https://docs.confluent.io/current/tutorials/examples/kubernetes/gke-base/docs/index.html","timestamp":"2019-09-16T14:53:43+00:00"

2020-11-14 21:19:42 211

原创 Kafka Streams开发入门(5)

1. 背景演示了split操作算子的用法。今天展示一下split的逆操作:merge。Merge算子的作用是把多股实时消息流合并到一个单一的流中。2. 功能演示说明假设我们有多个Kafka topic,每个topic表示某类特定音乐类型的歌曲,比如有摇滚乐、古典乐等。本例中我们演示如何使用Kafka Streams将这些歌曲合并到一个Kafka topic中。我们依然使用Protocol Buffer对歌曲进行序列化和反序列化。你大概可以认为歌曲可以用下面的格式来表示:{"artist"..

2020-11-14 21:13:44 253

原创 Kafka Streams开发入门(4)

背景演示了filter操作算子的用法。今天展示一下如何根据不同的条件谓词(Predicate)将一个消息流实时地进行分流,划分成多个新的消息流,即所谓的流split。有的时候我们想要对消息流中的不同消息类型进行不同的处理逻辑,此时流split功能就显得非常的实用。演示功能说明今天依然使用表征一个电影的消息类型,格式如下:{"name":"Meryl Streep","title":"The Iron Lady","genre":"drama"}{"name":"Will ...

2020-11-14 21:07:08 230

原创 Kafka Streams开发入门(3)

背景我们介绍了Kafka Streams中的消息过滤操作filter,今天我们展示一个对消息进行转换Key的操作,依然是结合一个具体的实例展开介绍。所谓转换Key是指对流处理中每条消息的Key进行变换操作,以方便后面进行各种groupByKey操作。演示功能说明本篇演示selectKey的用法,即根据指定的Key选择逻辑对每条消息的Key进行变换操作。今天使用的输入topic消息格式如下:ID | First Name | Last Name | Phone Number比如这样:..

2020-11-14 20:49:12 148

原创 Kafka Streams开发入门(2)

背景上一篇我们介绍了Kafka Streams中的消息转换操作map,今天我们给出另一个经典的转换操作filter的用法。依然是结合一个具体的实例展开介绍。演示功能说明本篇演示filter用法,即根据给定的过滤条件或逻辑实时对每条消息进行过滤处理。今天使用的输入topic消息格式如下:{"name": "George R. R. Martin", "title": "A Song of Ice and Fire"}{"name": "C.S. Lewis", "title": "Th..

2020-11-14 20:31:24 133

原创 Kafka Streams开发入门(1)

背景最近发现Confluent公司在官网上发布了Kafka Streams教程,共有10节课,每节课给出了Kafka Streams的一个功能介绍。这个系列教程对于我们了解Kafka Streams还是很有帮助的。为什么要了解Kafka Streams?其实我一直觉得国内对于Flink有点过于迷恋了。大厂使用Flink尚自合理,毕竟数据量大且需要整套的集群管理调度监控功能。但一般的中小公司业务简单体量小,何必要费时费力地搭建一整套Flink集群。有很多简单的流处理业务场景使用Kafka Streams.

2020-11-14 20:17:41 360

原创 Kafka生产者-向Kafka中写入数据详解

(1)生产者概览(1)不同的应用场景对消息有不同的需求,即是否允许消息丢失、重复、延迟以及吞吐量的要求。不同场景对Kafka生产者的API使用和配置会有直接的影响。例子1:信用卡事务处理系统,不允许消息的重复和丢失,延迟最大500ms,对吞吐量要求较高。例子2:保存网站的点击信息,允许少量的消息丢失和重复,延迟可以稍高(用户点击链接可以马上加载出页面即可),吞吐量取决于用户使用网站的频度。(2)Kafka发送消息的主要步骤消息格式:每个消息是一个ProducerRecord对象,必须指定

2020-11-14 18:50:24 1620

原创 Kafka消费者-从Kafka读取数据详解

(1)Customer和Customer Group(1)两种常用的消息模型队列模型(queuing)和发布-订阅模型(publish-subscribe)。队列的处理方式是一组消费者从服务器读取消息,一条消息只由其中的一个消费者来处理。发布-订阅模型中,消息被广播给所有的消费者,接收到消息的消费者都可以处理此消息。(2)Kafka的消费者和消费者组Kafka为这两种模型提供了单一的消费者抽象模型:消费者组 (consumer group)。 消费者用一个消费者组名标记自己。 一个.

2020-11-14 18:08:12 738

原创 kafka常用命令详解

集群安装信息如下:kafka-broker-list:node21:9092,node22:9092,node23:9092zookeeper.connect-list: node21:2181,node22:2181,node23:21811.启动zookeeper集群所有zookeeper节点都需要执行zkServer.sh start2.启动Kafka集群服务所有Kafka节点都需要执行bin/kafka-server-start.sh config/serv...

2020-11-09 18:30:34 1194

转载 Kafka消费组(consumer group)详解

一直以来都想写一点关于kafka consumer的东西,特别是关于新版consumer的中文资料很少。最近Kafka社区邮件组已经在讨论是否应该正式使用新版本consumer替换老版本,笔者也觉得时机成熟了,于是写下这篇文章讨论并总结一下新版本consumer的些许设计理念,希望能把consumer这点事说清楚,从而对广大使用者有所帮助。在开始之前,我想花一点时间先来明确一些概念和术语,这会极大地方便我们下面的讨论。另外请原谅这文章有点长,毕竟要讨论的东西很多,虽然已然删除了很多太过细节的东西。.

2020-11-09 05:33:54 1983

原创 JVM性能监控、调优工具

现实企业级Java应用开发、维护中,有时候我们会碰到下面这些问题: OutOfMemoryError,内存不足 内存泄露 线程死锁 锁争用(Lock Contention) Java进程消耗CPU过高 ...... 这些问题在日常开发、维护中可能被很多人忽视(比如有的人遇到上面的问题只是重启服务器或者调大内存,而不会深究问题根源),但能够理解并解决这些问题是Java程序员进阶的必备要求。本文将对一些常用的JVM性能调优监控工具进行介绍,希望..

2020-11-05 22:04:39 139

原创 JVM参数列表详解

JVM参数详细列表-client :设置JVM使用client模式,特点启动较快(神机不明显(I5/8G/SSD))-server :设置JVM使用server模式。64位JDK默认启动该模式-agentlib:libname[=options] :用于加载本地的lib-agentlib:hprof :用于获取JVM的运行情况-agentpath:pathnamep[=options] :加载制定路径的本地库-Dproperty=value :设置系统属性名/值对-jar :制定

2020-11-05 21:33:00 121

原创 gRPC 服务调用原理

1. 常用的服务调用方式无论是 RPC 框架,还是当前比较流行的微服务框架,通常都会提供多种服务调用方式,以满足不同业务场景的需求,比较常用的服务调用方式如下:同步服务调用:最常用的服务调用方式,开发比较简单,比较符合编程人员的习惯,代码相对容易维护些; 并行服务调用:对于无上下文依赖的多个服务,可以一次并行发起多个调用,这样可以有效降低服务调用的时延; 异步服务调用:客户端发起服务调用之后,不同步等待响应,而是注册监听器或者回调函数,待接收到响应之后发起异步回调,驱动业务流程继续执行,比较常

2020-11-04 22:38:20 1722

原创 gRPC 线程模型分析

1. RPC 线程模型1.1 BIO 线程模型在 JDK 1.4 推出 Java NIO 之前,基于 Java 的所有 Socket 通信都采用了同步阻塞模式(BIO),这种一请求一应答的通信模型简化了上层的应用开发,但是在性能和可靠性方面却存在着巨大的瓶颈。因此,在很长一段时间里,大型的应用服务器都采用 C 或者 C++ 语言开发,因为它们可以直接使用操作系统提供的异步 I/O 或者 AIO 能力。当并发访问量增大、响应时间延迟增大之后,采用 Java BIO 开发的服务端软件只有通过硬件

2020-11-04 22:25:04 1543

原创 gRPC 客户端创建和调用原理

1. gRPC 客户端创建流程1.1 背景gRPC 是在 HTTP/2 之上实现的 RPC 框架,HTTP/2 是第 7 层(应用层)协议,它运行在 TCP(第 4 层 - 传输层)协议之上,相比于传统的 REST/JSON 机制有诸多的优点:基于 HTTP/2 之上的二进制协议(Protobuf 序列化机制); 一个连接上可以多路复用,并发处理多个请求和响应; 多种语言的类库实现; 服务定义文件和自动代码生成(.proto 文件和 Protobuf 编译工具)。此外,gRPC 还

2020-11-04 02:02:56 1223

原创 gRPC 服务端创建和调用原理

1. RPC 入门1.1 RPC 框架原理RPC 框架的目标就是让远程服务调用更加简单、透明,RPC 框架负责屏蔽底层的传输方式(TCP 或者 UDP)、序列化方式(XML/Json/ 二进制)和通信细节。服务调用者可以像调用本地接口一样调用远程的服务提供者,而不需要关心底层通信细节和调用过程。RPC 框架的调用原理图如下所示:1.2 业界主流的 RPC 框架业界主流的 RPC 框架整体上分为三类:支持多语言的 RPC 框架,比较成熟的有 Google 的 gRPC、Apach

2020-11-04 01:47:32 907

原创 gRPC :为什么是protobuf

背景谈到RPC,就避免不了序列化的话题。gRPC默认的序列化方式是protobuf,原因很简单,因为两者都是google发明的,哈哈。在当初Google开源protobuf时,很多人就期待是否能把RPC的实现也一起开源出来。没想到最终出来的是gRPC,终于补全了这一块。跨语言的序列化方案事实上的跨语言序列化方案只有三个: protobuf, thrift, json。json体积太大,并且缺少类型信息,实际上只用在RESTful接口上,并没有看到RPC框架会默认选json做序列化的。

2020-11-04 01:38:27 283

原创 RPC 框架原理是?gRPC 是什么?gRPC设计原则

1. RPC 入门1.1 RPC 框架原理RPC 框架的目标就是让远程服务调用更加简单、透明,RPC 框架负责屏蔽底层的传输方式(TCP 或者 UDP)、序列化方式(XML/Json/ 二进制)和通信细节。服务调用者可以像调用本地接口一样调用远程的服务提供者,而不需要关心底层通信细节和调用过程。RPC 框架的调用原理图如下所示:整理成序列图后的效果是:RPC 框架--时序图​​1.2 业界主流的 RPC 框架业界主流的 RPC 框架整体上分为三类:支持多语言的 RP.

2020-11-04 01:35:04 383

原创 LVS 工作原理图文讲解

一、负载均衡由来在业务初期,我们一般会先使用单台服务器对外提供服务。随着业务流量越来越大,单台服务器无论如何优化,无论采用多好的硬件,总会有性能天花板,当单服务器的性能无法满足业务需求时,就需要把多台服务器组成集群系统提高整体的处理性能。不过我们要使用统一的入口方式对外提供服务,所以需要一个 流量调度器 通过均衡的算法,将用户大量的请求均衡地分发到后端集群不同的服务器上。这就是我们后边要说的 负载均衡。使用负载均衡带来的好处: 提高了系统的整体性能 提高了系统的扩展...

2020-11-02 00:53:30 570

原创 代码对比工具,我就用这6个

在程序开发的过程中,程序员会经常对源代码以及库文件进行代码对比,在这篇文章里我们向大家介绍六款程序员常用的代码比较工具WinMergeWinMerge是一款运行于Windows系统下的文件比较和合并工具,使用它可以非常方便地比较多个文档内容,适合程序员或者经常需要撰写文稿的朋友使用。WinMerge会将两个文件内容做对比,并在相异之处以高亮度的方式显示,让使用者可以很快的查知;可以直接让左方的文件内容直接覆盖至右方,或者反过来也可以覆盖。DiffuseDiffuse在命令行中的速

2020-11-01 23:56:44 96

原创 QPS、TPS等网络关键指标理解

1、QPSQPSQueries Per Second 是每秒查询率 ,是一台服务器每秒能够相应的查询次数,是对一个特定的查询服务器在规定时间内所处理流量多少的衡量标准, 即每秒的响应请求数,也即是最大吞吐能力。2、TPSTPSTransactions Per Second也就是事务数/秒。一个事务是指一个客户机向服务器发送请求然后服务器做出反应的过程。客户机在发送请求时开始计时,收到服务器响应后结束计时,以此来计算使用的时间和完成的事务个数,3、QPS和TPS区别个人理解如下:...

2020-11-01 23:46:52 1600

原创 LVS、Nginx 及 HAProxy 的区别

在实际应用中,在 Web 服务器集群之前总会有一台负载均衡服务器,负载均衡设备的任务就是作为 Web 服务器流量的入口,挑选最合适的一台 Web 服务器,将客户端的请求转发给它处理,实现客户端到真实服务端的透明转发。最近几年很火的「云计算」以及分布式架构,本质上也是将后端服务器作为计算资源、存储资源,由某台管理服务器封装成一个服务对外提供,客户端不需要关心真正提供服务的是哪台机器,在它看来,就好像它面对的是一台拥有近乎无限能力的服务器,而本质上,真正提供服务的,是后端的集群。LVS、Nginx、..

2020-11-01 23:43:43 389

转载 Scala 系列(十三)—— 隐式转换和隐式参数

一、隐式转换1.1 使用隐式转换隐式转换指的是以implicit关键字声明带有单个参数的转换函数,它将值从一种类型转换为另一种类型,以便使用之前类型所没有的功能。示例如下:// 普通人class Person(val name: String)// 雷神class Thor(val name: String) { // 正常情况下只有雷神才能举起雷神之锤 def hammer(): Unit = { println(name + "举起雷神之锤") }}o..

2020-11-01 23:12:04 109

转载 Scala 系列(十二)—— 类型参数

一、泛型Scala 支持类型参数化,使得我们能够编写泛型程序。1.1 泛型类Java 中使用<>符号来包含定义的类型参数,Scala 则使用[]。class Pair[T, S](val first: T, val second: S) { override def toString: String = first + ":" + second}object ScalaApp extends App { // 使用时候你直接指定参数类型,也可以不指定,...

2020-11-01 23:04:02 202

转载 Scala 系列(十一)—— 模式匹配

一、模式匹配Scala 支持模式匹配机制,可以代替 swith 语句、执行类型检查、以及支持析构表达式等。1.1 更好的swithScala 不支持 swith,可以使用模式匹配match...case语法代替。但是 match 语句与 Java 中的 switch 有以下三点不同:Scala 中的 case 语句支持任何类型;而 Java 中 case 语句仅支持整型、枚举和字符串常量; Scala 中每个分支语句后面不需要写 break,因为在 case 语句中 break 是隐含..

2020-11-01 22:49:22 107

转载 Scala 系列(十)—— 函数 & 闭包 & 柯里化

一、函数1.1 函数与方法Scala 中函数与方法的区别非常小,如果函数作为某个对象的成员,这样的函数被称为方法,否则就是一个正常的函数。// 定义方法def multi1(x:Int) = {x * x}// 定义函数val multi2 = (x: Int) => {x * x}println(multi1(3)) //输出 9println(multi2(3)) //输出 9也可以使用def定义函数:def multi3 = (x: Int) =&gt...

2020-11-01 22:45:17 125

原创 hive on tez

Tez说明将xyz替换为您正在使用的tez发行版号。例如0.5.0。对于Tez版本0.8.3和更高版本,Tez需要Apache Hadoop版本为2.6.0或更高版本。对于Tez版本0.9.0及更高版本,Tez需要Apache Hadoop版本为2.7.0或更高版本。关于版本1.Hadoop 2.7.0+(我的是2.7.1)2.Tez还需要Protocol Buffers 2.5.0,包括protoc编译器。(如果你下载的是apache-tez-0.9.0-src.tar.gz包则需要编译,需

2020-11-01 00:31:12 829

转载 Scala 系列(九)—— 继承和特质

一、继承1.1 Scala中的继承结构Scala 中继承关系如下图:Any 是整个继承关系的根节点; AnyRef 包含 Scala Classes 和 Java Classes,等价于 Java 中的 java.lang.Object; AnyVal 是所有值类型的一个标记; Null 是所有引用类型的子类型,唯一实例是 null,可以将 null 赋值给除了值类型外的所有类型的变量; Nothing 是所有类型的子类型。1.2 extends & overrideS

2020-11-01 00:06:05 190 1

linux实用命令集.txt

自己在工作中的一些总结,包括了使用工具,Java技术,数据库安装

2019-07-16

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除