基于Filebeat和kafka日志采集方案

本文介绍了基于Filebeat的日志采集方案,通过Filebeat监控日志目录,实时将日志发送到Kafka,然后使用Python Kafka消费者入库。Filebeat包括Prospector、Harvester和Spooler组件,Kafka提供了高吞吐量的消息系统,支持消息持久化。Python Kafka是Python客户端,用于消息消费。
摘要由CSDN通过智能技术生成

整体方案

日志文件以固定大小进行切割,使用filebeat监控日志目录,实时采集写入kafka中,并通过python kafka消费入库。

在这里插入图片描述

Filebeat

Filebeat是本地文件的日志数据采集器,监听日志目录或特定文件,并将它们转发给ElastickSearch、Logstash、Kafka中。它由三个主要组件组成:

  1. Prospector
    负责检测指定日志目录或文件,并对检测到的每个日志文件,filebeat启动一个收割进程(harvester),Filebeat目前支持两种Prospector类型:log和stdin,每个Prospector类型可以在配置文件中定义多个
  2. Harvester
    负责读取单个文件内容,harvester负责文件的打开和关闭,并将读取到的新内容发送到处理程序(spooler)
  3. Spooler
    集合harvester发送的数据,并将数据发送到指定地点。
    Filebeat保持每个文件的状态,并频繁地将Harvester上次读取文件的位置从注册表更新到磁盘,确保将全部的日志数据读取出来。如果output出行故障,Filebeat会将最后的文件读取位置保存下来,直到output恢复快速地对文件进行读取;如果Filebeat故障重启,会从注册表恢复重启之前的状态信息,让Filebeat继续从之前已知的位置开始进行读取。

在这里插入图片描述

Kafka

Kafka是由Scala和Java编写的一种高吞吐量的分布式发布订阅消息系统,并且支持消息的持久化。相关术语介绍:

  1. Broker
    Kafka集群的每个节点称为Broker

在这里插入图片描述

  1. Topic
    消息的分类,消息发送到指定的Topic中,Topic由多个Partition组成

在这里插入图片描述

  1. Partition
    Partition由一系列有序不可变的消息组成,物理上由多个Segment组成
  2. Segment
    由index file和data file组成,这两个文件一一对应,后缀分别为“.index”,“.log”,表示索引文件和数据文件。索引文件存放的是相对偏移量,关系图如下:

在这里插入图片描述

  1. Producer
    向Kafka集群发送消息,可以发送到指定分区,也可以指定均衡策略,不指定默认采取随机均衡,消息随机发送到不同分区中。
  2. Consumer
    Kafka使用offset来记录当前消费位置,可以有多个group来同时消费同一topic下的消息,如果有两个不同的group同时消费,它们的消费记录位置offset互不干扰。
  3. Consumer Group
    每个Consumer属于一个特定的Consumer Group,可为每个Consumer指定group name,若不指定则属于默认group。消费者的数量应该小于等于分区数量,因为在一个group中,每个分区只能绑定到一个消费者上,即一个消费者可以消费多个分区,一个分区只能给一个消费者消费。
    新消费者加入消费组,它将消费一个或多个分区;消费者离开消费组,它所消费的分区分配给其他消费者,这种现象称为重平衡(rebalance),重平衡期间,所有消费者都不能消费消息,会造成短暂的不可用。

在这里插入图片描述

在这里插入图片描述

Python Kafka

Python Kafka为Kafka消息消费的Python客户端,
官网地址:https://pypi.org/project/kafka-python/
开发之前,需要安装Python Kafka库:

>>> pip install kafka-python

完整代码:

#!/usr/bin/python
# -*- coding: UTF-8 -*-

import logging
import json
import threading
from datetime import datetime
from configparser import ConfigParser
from pymysql import connect
from kafka import KafkaConsumer, TopicPartition, OffsetAndMetadata

class mysqlSink:
    def __init__ (self,
                  host,
                  user,
                  passwd,
                  db,
                  port,
                  charset
                  ):
        self.host   = host
        self.user   = user
        self.passwd = passwd
        self.db     = db
        self.port   = port
        self.charset= charset
        self.conn   = None
        self
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值