filebeat、kafka

elk的架构

es数据库:非关系型数据库,json格式

logstash:收集日志

kibana:图形化的工具

以上三种结合起来即为日志收集系统

filebeat

  • 作用:filebeat是一款轻量级的日志收集工具,不依赖java环境,用来替代在机器上没有java环境的情况下进行日志收集

filebeat启动收集日志,只要10m左右的内存

bash 复制代码
filebeat.inputs:
  type: log
  enabled: true
  paths:
    - /var/log/nginx/access.log
    - /var/log/nginx/error.log
  tags: ["nginx"]
  #标签,为了后续logstash进行识别的
  fields:
    service_name: 192.168.233.21 nginx
  #设定显示的索引名称
  log_type: nginx
  from: 192.168.233.21
bash 复制代码
  type: log
  enabled: true
  paths:
  - /usr/local/mysql/data/mysql_general.log
  tags: ["mysql"]
  fields:
  service_name: 192.168.233.21_mysql
  log_type: mysql
  from: 192.168.233.21

zookeeper + kafka

zookeeper :开源的分布式框架协调服务

zookeeper的工作机制:

1、基于观察者模式设计的分布式结构,负责存储和管理架构当中的元信息,架构当中的应用接受观察者的监控,一旦数据有变化,它会通知对应的zookeeper,保存变化的信息

特点:

  • 1、最少要有3台机器,一个领导者(leader),多个跟随者(follower)组成

  • 2、zookeeper要有半数以上的节点存活,集群就可正常工作,所以都是奇数台部署

  • 3、全局数据一致

  • 4、数据更新的原子性:要么都成功,要么都失败

  • 5、实时性

zookeeper的数据架构:

1、统一命名服务,不是以ip来记录,可以用域名也可以用主机名来记录信息

2、统一配置管理,所有节点信息的配置要一致

3、统一集群管理,在整个分布式的环境中,必须实时的掌握每个节点的状态,如果状态发生变化,要及时更新

kafka消息队列

服务端向客户端发送一个指令,客户端收到指令并且通过这个指令反馈到服务端,完成一个异步方式的通信的流程

kafka消息队列 -----------》大数据场景非常合适

rabbitMQ ------------》适合处理小场景的数据请求

activeMQ -------------》适合处理小场景的数据请求

消息队列的应用场景

1、异步处理

  • 用户的短信验证码,邮件通知

2、系统解耦

  • 微服务架构中的服务之间的通信

  • 降低各个组件之间的依赖程度(耦合度),提高组件的灵活性和可维护性

3、负载均衡

  • 高并发系统中的任务处理

4、流量控制和限流

  • 根据api请求来进行处理,通过控制消息的生产速度和消费的处理速度来完成限流

  • 端口:应用和应用之间通信

  • api接口:应用程序内部各个组件之间通信的方式

5、任务调度和定时任务:

  • 消息队列可以定时的进行任务调度,按照消费者的计划生成对应的数据

6、数据同步和分发:

  • 日志收集和数据收集

  • 远程的实现数据的统一管理

7、实时数据处理

8、备份和恢复

消息队列的模式:

1、点对点(1对1),生产者生产消息,消费者消费

2、发布/订阅模式

消息的生产者发布一个主题,其他的消费者订阅这个主题,从而实现一对多

主题:topic

kafka组件的名称:

1、主题 topic,主题是kafka数据流的一个基本的单元,类似于数据的管道,生产者将消息发布到主题,其他的消费者订阅主题,来消费消息,主题可以被分区,分区有偏移量

2、生产者:将消息写入主题和分区

3、消费者:从主题和分区当中消费发布的消息,一个消费者可以订阅多个主题

4、分区:一个主题可以被分为多个分区,每个分区都是数据的有序的子集,分区越多,消费者消费的速度就越快,可以避免生产者的消费堆积,分区当中有偏移量,按照偏移量进行有序存储,消费者可以独立的读写每个分区的数据,一般是不考虑的,只有在消息出现堆积的时候,会考虑扩展分区数

kafka的消费堆积出现,应该如何处理:

消费者没有及时处理生产者发布的消息,导致消息堆积

1、扩展分区数

5、偏移量:消息在分区当中的唯一标识

test1 test2 test3 分区1

0 1 2

6、经纪人:zookeeper,存储分区的信息,kafka集群的元数据

log.retention.hours=168(单位为小时,即7天,默认是7天)

消费队列当中,数据保存的最大时间

bash 复制代码
./kafka-server-start.sh -daemon /usr/local/kafka/config/server.properties
bash 复制代码
kafka-topics.sh --create --bootstrap-server 192.168.233.61:9092,192.168.233.62:9092,192.168.233.63:9092 --replication-factor 2 --partitions 3 --topic test1

-bootstrap-server:这里的地址一般是一个集群当中的地址即可,默认为包含所有
-replication-factor 2:定义主题的副本数 2个副本,不宜超过6个,影响性能,副本数必须是偶数

--partitions 3:定义分区数

./kafka-topics.sh --list --bootstrap-server 192.168.233.61:9092:查看主题数

kafka-console-consumer.sh --bootstrap-server 192.168.233.61:9092,192.168.233.62:9092,192.168.233.63:9092 --topic test1 --from-beginning(消费)

kafka-console-producer.sh --broker-list 192.168.233.61:9092,192.168.233.62:9092,192.168.233.63:9092 --topic test1(生产)

  • 修改主题的分区数:

kafka-topics.sh --bootstrap-server 192.168.233.61:9092,192.168.233.62:9092,192.168.233.63:9092 --alter --topic test1 --partitions 6

Topic: test1 TopicId: 2vuwpY75Qj2bk2e9EYS4Vg PartitionCount: 3 ReplicationFactor: 2 Configs:

Topic: test1 Partition: 0 Leader: 1 Replicas: 1,0 Isr: 1,0
Topic: test1 Partition: 1 Leader: 0 Replicas: 0,2 Isr: 0,2
Topic: test1 Partition: 2 Leader: 2 Replicas: 2,1 Isr: 2,1

leader: 每一个分区都有一个leader

领导者负责处理分区的读写操作

Replicas: 副本数0 1 2分别对应每个leader

Isr: 表示和哪个leader进行同步

Partition: 分区的数量

  • 删除topic:

kafka-topics.sh --delete --bootstrap-server 192.168.233.61:9092,192.168.233.62:9092,192.168.233.63:9092 --topic test1

filebeat在kafka集群上创建主题

bash 复制代码
kafka {
    bootstrap_servers => "192.168.233.61:9092,192.168.233.62:9092,192.168.233.63:9092"
    topics => "nginx_mysql"
    type => "nginx_kafka"
    codec => "json"
    指定数据的格式是json
    auto_offset_reset => "latest"
    latest:从尾部开始
    earliest: 从头部开始
    decorate_events => true
    传递给es的数据额外的附加kafka的属性数据
}
bash 复制代码
input {
     kafka {
       bootstrap_servers => "192.168.233.61:9092,192.168.233.62:9092,192.168.233.63:9092"
       topics => "nginx_mysql"
       type => "nginx_kakfa"
       codec => "json"
       auto_offset_reset => "latest"
       decorate_events => true
}
}
output {
    if "nginx-1" in [tags] {
    elasticsearch {
      hosts => ["192.168.233.10:9200","192.168.233.20:9200"]
      index => "%{[fields][service_name]}-%{+YYYY.MM.dd}"
    }
  }
  if "mysql-1" in [tags] {
    elasticsearch {
      hosts => ["192.168.233.10:9200","192.168.233.20:9200"]
      index => "%{[fields][service_name]}-%{+YYYY.MM.dd}"
    }
  }
}
相关推荐
zpf_叶绿体学编程5 小时前
Kafka-go语言一命速通
分布式·kafka
java1234_小锋6 小时前
什么是Kafka?有什么主要用途?
分布式·kafka
言之。9 小时前
【微服务】8、分布式事务 ( XA 和 AT )
分布式·微服务·架构
Lin_Miao_0911 小时前
Kafka优势剖析-高效的数据复制
分布式·kafka
Lin_Miao_0911 小时前
Kafka优势剖析-幂等性和事务
分布式·kafka
码至终章11 小时前
SpringBoot日常:集成Kafka
java·spring boot·后端·kafka
QYR_1113 小时前
分布式光纤传感器行业:市场潜力巨大,技术革新引领未来
分布式
明达技术13 小时前
分布式IO模块:激光切割机产线高效控制的创新引擎
分布式
孙尚香蕉15 小时前
基于伪分布式模式部署Hadoop集群
hadoop·分布式