LogAgen的工作流程
LogAgen的工作流程:
一.读日志 --tailf 第三方库
新建tail_test/main.go
package main
import (
"fmt"
"github.com/hpcloud/tail"
"time"
)
func main() {
fileName := "./my.log"
//fileName := "/tmp/kafka-logs/web_log-0/00000000000000000000.log"
config := tail.Config{
ReOpen: true, //重新打开
Follow: true, //是否跟随
Location: &tail.SeekInfo{Offset: 0, Whence: 2}, //从文件的哪个地方开始读
MustExist: false, //文件不存在不报错
Poll: true,
}
tails, err := tail.TailFile(fileName, config)
if err != nil {
fmt.Println("tail file failed,err:", err)
return
}
var (
line *tail.Line
ok bool
)
for {
line,ok = <-tails.Lines
if !ok {
fmt.Printf("tail file close reopen,filename:%s\n",tails,fileName)
time.Sleep(time.Second)
continue
}
fmt.Println("line:",line.Text)
}
}
执行下面的命令:
export GO111MODULE=on
export GOPROXY=https://goproxy.cn
go mod init
go mod tidy
go build client.go
./client
二. 往kafka写日志--sarama
window安装方法参考;
https://docs.qq.com/doc/DTmdldEJJVGtTRkFi
Ubuntu18.04 安装Jdk1.8
环境信息: OS:Ubuntu18.04 JDK:8
第一步:安装JDK
https://blog.csdn.net/hunt_er/article/details/82850509
1.输入命令:sudo apt install openjdk-8-jre-headless,回车
2.java -version //查看版本
第二步:安装zookeeper
1.下载:kafka_2.12-2.4.0.tgz
打开下面的网址下载:
http://kafka.apache.org/downloads
wget http://mirror.bit.edu.cn/apache/kafka/2.4.0/kafka_2.12-2.4.0.tgz
tar -zxvf kafka_2.12-2.4.0.tgz
配置
- 打开config\zookeeper.properties文件
- 修改dataDir=E:\zookeeper3.5.5\data (windows下配置)
启动
cd /usr/local/kafka_2.12-2.4.0/bin
./zookeeper-server-start.sh ../config/zookeeper.properties
第三步:安装kafka
配置
- 打开config目录下的server.properties文件
- 修改log.dirs=E:\kafkalogs (windows下配置)
启动
cd /usr/local/kafka_2.12-2.4.0/bin
./kafka-server-start.sh ../config/server.properties
三.编辑代码
新建client.go文件
package main
import (
"fmt"
"github.com/Shopify/sarama"
)
// 基于sarama第三方库开发的kafka client
func main() {
config := sarama.NewConfig()
config.Producer.RequiredAcks = sarama.WaitForAll // 发送完数据需要leader和follow都确认
config.Producer.Partitioner = sarama.NewRandomPartitioner // 新选出一个partition
config.Producer.Return.Successes = true // 成功交付的消息将在success channel返回
// 构造一个消息
msg := &sarama.ProducerMessage{}
msg.Topic = "web_log"
msg.Value = sarama.StringEncoder("this is a test log11")
// 连接kafka
client, err := sarama.NewSyncProducer([]string{"127.0.0.1:9092"}, config)
if err != nil {
fmt.Println("producer closed, err:", err)
return
}
fmt.Println("连接成功.")
defer client.Close()
// 发送消息
pid, offset, err := client.SendMessage(msg)
if err != nil {
fmt.Println("send msg failed, err:", err)
return
}
fmt.Printf("pid:%v offset:%v\n", pid, offset)
}
执行下面的命令:
export GO111MODULE=on
export GOPROXY=https://goproxy.cn
go mod init
go mod tidy
go build client.go
./client
查看kafka-logs/web_log-0日志文件夹里会在如下四个文件:
haima@haima-PC:/tmp/kafka-logs/web_log-0$ ls
00000000000000000000.index 00000000000000000000.timeindex
00000000000000000000.log leader-epoch-checkpoint
LogAgen的工作流程的更多相关文章
- struts2工作流程
struts2的框架结构图 工作流程 1.客户端请求一个HttpServletRequest的请求,如在浏览器中输入http://localhost: 8080/bookcode/Reg.action ...
- SecondaryNameNode的工作流程
SecondaryNameNode是用来合并fsimage和edits文件来更新NameNode和metadata的. 其工作流程为: 1.secondary通知namenode切换edits文件 2 ...
- Storm 中什么是-acker,acker工作流程介绍
概述 我们知道storm一个很重要的特性是它能够保证你发出的每条消息都会被完整处理, 完整处理的意思是指: 一个tuple被完全处理的意思是: 这个tuple以及由这个tuple所导致的所有的tupl ...
- gitlab工作流程简介
gitlab工作流程简介 新建项目流程 创建/导入项目 可以选择导入github.bitbucket项目,也可以新建空白项目,还可以从SVN导入项目 建议选择private等级 初始化项目 1.本地克 ...
- Git 工作流程
Git 作为一个源码管理系统,不可避免涉及到多人协作. 协作必须有一个规范的工作流程,让大家有效地合作,使得项目井井有条地发展下去.”工作流程”在英语里,叫做”workflow”或者”flow”,原意 ...
- Spark基本工作流程及YARN cluster模式原理(读书笔记)
Spark基本工作流程及YARN cluster模式原理 转载请注明出处:http://www.cnblogs.com/BYRans/ Spark基本工作流程 相关术语解释 Spark应用程序相关的几 ...
- tornado 学习笔记10 Web应用中模板(Template)的工作流程分析
第8,9节中,我们分析Tornado模板系统的语法.使用以及源代码中涉及到的相关类,而且对相关的源代码进行了分析.那么,在一个真正的Web应用程序中,模板到底是怎样使用?怎样被渲染? ...
- RDIFramework.NET ━ .NET快速信息化系统开发框架 ━ 工作流程组件介绍
RDIFramework.NET ━ .NET快速信息化系统开发框架 工作流程组件介绍 RDIFramework.NET,基于.NET的快速信息化系统开发.整合框架,给用户和开发者最佳的.Net框架部 ...
- NSURLSession使用说明及后台工作流程分析
原文摘自http://www.cocoachina.com/industry/20131106/7304.html NSURLSession是iOS7中新的网络接口,它与咱们熟悉的NSURLConne ...
- 了解SpringMVC框架及基本工作流程
传统原生的JSP+Servlet在开发上过程上虽然简单明了,JSP页面传递数据到Servlet,Servlet整理数据(逻辑开发)或者从数据库提取数据接着再转发到JSP页面上,但是其似乎只能止步于此, ...
随机推荐
- 鸿蒙HarmonyOS实战-ArkUI组件(Swiper)
一.Swiper 1.概述 Swiper可以实现手机.平板等移动端设备上的图片轮播效果,支持无缝轮播.自动播放.响应式布局等功能.Swiper轮播图具有使用简单.样式可定制.功能丰富.兼容性好等优点, ...
- 在Ubuntu上安装MySQL
在Ubuntu上安装MySQL sudo apt update sudo apt install mysql-server 安装完成后,MySQL服务将自动启动.要验证MySQL服务器正在运行,请输入 ...
- RedisTemplate 的简单使用
redisTemplate.opsForValue() 方法可以获得一个 Redis String 的操作类,通过该类可以执行一系列字符串类型数据的操作,例如获取.设置.删除数据等. // 示例 1: ...
- hive窗口分析函数使用详解系列二之分组排序窗口函数
1.综述 我们讨论面试中各大厂的SQL算法面试题,往往核心考点就在于窗口函数,所以掌握好了窗口函数,面对SQL算法面试往往事半功倍. 已更新第一类聚合函数类,点击这里阅读 hive窗口函数聚合函数类 ...
- Code Aesthetic
01 Abstraction Abstraction is the process of aggregating code with high similarity among multiple cl ...
- ICMP 概念
前言 打算从新整理网络这一块,那么我先把概念整理下来. 正文 ICMP是ip的一个组成.他传递差错报文以及其他需要注意的信息.主要用于反馈一些网络传输的问题.因为ip协议很容易丢包,那么icmp可以告 ...
- PIL.Image, numpy, tensor, cv2 之间的互转,以及在cv2在图片上画各种形状的线
''' PIL.Image, numpy, tensor, cv2 之间的互转 ''' import cv2 import torch from PIL import Image import num ...
- JavaScript中的事件模型如何理解?
一.事件与事件流 javascript中的事件,可以理解就是在HTML文档或者浏览器中发生的一种交互操作,使得网页具备互动性, 常见的有加载事件.鼠标事件.自定义事件等 由于DOM是一个树结构,如果在 ...
- AGC066 题解
题解:AT_agc066_a [AGC066A] Adjacent Difference 笑点解析:没有必要将总成本最小化. 我们将格子间隔的黑白染色(显然有两种染色方法),对于黑点我们要求它是奇数倍 ...
- win11右下角快捷面板打不开的处理方法
win11右下角快捷面板打不开的处理方法 在搜索中查询计算机管理(因为没有将此电脑放出来,所以就用搜索了) 然后找到服务,找到windows推送通知系统服务,右键属性,将自动改为禁用,然后停止此服务, ...