小菜鸟

java菜鸟号正在起航

flume监控目录文件的三种方案,我用过之后跟你说实话

在实际业务中,监控目录文件变化并实时采集数据是常见需求(如应用日志、业务数据文件等)。Flume 提供了三种方式来做这件事:Exec Source、Spool Dir Source、Taildir Source

三种监控方案对比

在开始配置前,先明确三种 Source 的核心差异,便于根据场景选择:

方案 核心原理 数据可靠性 实时性 适用场景 局限性
Exec Source 执行命令(如 tail -F)监听文件 低(易丢失) 实时跟踪单个日志文件 进程重启后丢失偏移量,不支持多文件监控
Spool Dir Source 监控目录,新文件进来就读 高,读完加标记 批量处理定时生成的文件 文件一旦放入目录不可修改,延迟较高
Taildir Source 监控多个文件,偏移量记到文件里 多文件实时跟踪 配置稍复杂,需维护偏移量文件
阅读全文 »

flume实战:从零配到跑起来,一篇就够了

理论啃完了,组件也认识了,但真到了要配一个 Agent 跑起来的时候,是不是还是觉得心里没底?别慌,这篇咱们不扯虚的,直接用真刀真枪的实战带你从头配到尾。顺便把启动命令、我踩过的坑,还有几个压箱底的调试技巧都给你盘明白。

flume命令参数解析

在启动 Flume 前,需先了解核心命令参数,确保启动命令正确无误。Flume 启动命令的基本格式是这样的:

flume-ng <角色> [参数]
角色 / 参数 说明 示例
agent 核心角色,启动一个 Flume Agent(最常用) flume-ng agent ...
avro-client 辅助角色,作为 Avro 客户端发送数据到 Agent(用于测试或数据注入) flume-ng avro-client ...
-c/--conf 指定配置文件目录(含 flume-env.shlog4j.properties -c /usr/local/flume/conf
-f/--config-file 指定 Agent 具体配置文件(定义 Source、Channel、Sink 的关联关系) -f conf/my-flume.conf
-n/--name 指定 Agent 的名称(必须与配置文件中定义的 Agent 名称一致) --name myagent
-D 传递 Java 系统参数(如堆内存配置) -Dflume.root.logger=INFO,console
阅读全文 »

Flume 到底是个啥?一文讲透这个日志采集工具

做数据平台,第一步就是日志采集。要是数据都进不来,后面再牛的架构都是白搭。

Flume 是 Apache 旗下的分布式日志采集工具,主打高可用、高可靠、易扩展。说白了,就是帮你在海量日志场景下,把数据从 A 点搬到 B 点,还不丢数据。

这篇文章我按自己的理解,把 Flume 的核心概念、组件架构捋一遍,尽量讲清楚它到底怎么工作的。本文基于 Flume 1.9.0(可通过官网或包管理工具安装,安装后需在 flume-env.sh 中配置 JAVA_HOME)。

>flume-ng version 
Flume 1.9.0
Source code repository: https://git-wip-us.apache.org/repos/asf/flume.git
Revision: d4fcab4f501d41597bc616921329a4339f73585e
Compiled by fszabo on Mon Dec 17 20:45:25 CET 2018
From source with checksum 35db629a3bda49d23e9b3690c80737f9

先说清楚它到底干啥的

Flume 的核心就一件事:从数据源采数据,传给存储系统。比如你的应用服务器每天产生几十个 GB 的日志,你想把这些日志弄到 HDFS 或 Kafka 里,Flume 就是干这个的。

它的优势,我用自己的话说:

  • 高可用:节点挂了能自动恢复,不至于整个采集链路瘫痪

  • 高可靠:通过持久化机制保证数据不丢,这个后面会细说

  • 分布式:可以横向扩展,日志量大了就加机器

  • 灵活:支持自定义数据源、传输逻辑和存储目标,大部分场景都能覆盖

阅读全文 »

Linux 软件包安装全指南:从 RPM、YUM 到源码编译

Linux 系统中软件包的安装与管理是系统运维的基础技能。本文将详细介绍 Linux 中两种核心软件包(源码包与二进制包)的特点及操作方法,包括 RPM 命令、YUM/APT 包管理工具的使用,以及源码包的编译安装流程,帮助你高效管理系统软件。

Linux 软件包的两种类型

Linux 软件包主要分为两类,适用场景和安装方式差异显著:

类型 格式示例 特点 适用场景
源码包 .tar.gz.tar.bz2 包含源代码,需编译后安装;跨架构,可自定义配置;安装步骤较复杂。 需要定制功能、优化性能的场景
二进制包 .rpm(RedHat 系)、.deb(Debian 系) 已编译为可执行文件,安装快速;依赖特定 CPU 架构;依赖关系需手动处理。 快速安装、版本稳定的场景

RPM 包管理(RedHat 系系统:CentOS、RHEL)

RPM(Redhat Package Manager)是 RedHat 系列系统的二进制包管理工具,直接操作 .rpm 格式的软件包。

RPM 包的命名规则

RPM 包名包含丰富信息,格式为:
名称-版本-发布版本.架构.rpm
例如:httpd-2.4.6-97.el7.centos.x86_64.rpm

  • httpd:软件名称
  • 2.4.6:版本号
  • 97.el7.centos:发布版本(与系统版本相关)
  • x86_64:适用架构(常见架构见下表)
架构标识 适用 CPU 类型
noarch 不依赖架构(如脚本类软件)
i386/i686 Intel 32 位 / 64 位兼容 CPU
x86_64 AMD/Intel 64 位 CPU
arm ARM 架构(如嵌入式设备、树莓派)

RPM 核心操作命令

(1)安装 RPM 包
阅读全文 »

Shell 循环语句:for、while、until 及循环控制

循环是 Shell 脚本中实现重复执行任务的核心结构,Bash 提供了 forwhileuntil 三种循环语句,以及 breakcontinue 等控制命令。掌握这些工具能高效处理批量任务(如文件处理、日志分析等)。

for 循环:遍历列表或范围

for 循环适合已知循环对象集合的场景,有两种语法形式。

列表遍历语法(基础形式)

for 变量 in 列表
do
  命令1
  命令2
done
  • 列表:可以是直接给出的值、文件通配符、命令输出等。
  • 变量:每次循环从列表中取一个值赋值给变量。
示例 1:遍历固定值列表
#!/bin/bash
# 遍历一周的天数
for day in 周一 周二 周三 周四 周五 周六 周日
do
  echo "今天是 $day"
done

输出:

今天是 周一
今天是 周二
...
今天是 周日
示例 2:遍历文件列表
阅读全文 »
0%