淘东电商项目(48) -ELK+Kafka分布式日志收集(原理篇)

简介: 淘东电商项目(48) -ELK+Kafka分布式日志收集(原理篇)

引言

本文代码已提交至Github,有兴趣的同学可以下载来看看:https://github.com/ylw-github/taodong-shop

在前面的博客,主要是讲解了在Docker下搭建ELK,以及实现搜索功能,有兴趣的同学可以看下:

在本文,主要讲解ELK的另外一种用途,即当前主流的分布式日志采集系统(ELK+Kafka)的原理。

本文目录结构:

l____引言

l____ 1. 为什么选ELK+Kafa作为分布式日志采集系统?

l____2. ELK+Kafka日志收集原理

1. 为什么选ELK+Kafa作为分布式日志采集系统?

在以往的传统单体系统中,我们通常都是把日志记录在文件里,如果出现了bug是直接找日志文件定位问题,如下图:

但是随着用户量的增大,不得不弄集群了,如果出现了bug,不得不去查询每一台机器的日志文件:

这时候,有什么解决方方案了,为了统一日志管理,出现了很多的日志统一管理工具,例如:syslog,主要是汇总收集日志。

虽然Syslog可以收集到日志,但是还是有缺陷的,比如需要去查询日志我们不得不使用命令去查询,还有我们想要统计和排序日志并以图形化的形式显示,Syslog的功能是做不到的。到这里我们很容易想到使用ELK(elasticsearch+logstash+kibana)的方式实现,如下图:

从上图,我们基本满足日志采集的需求了,可以通过kibana来实现图形化的查看。但是,细心的同学肯定还会注意到,每一个服务器都要绑定一个logstash,这样也是不合理的,那么该如何解决呢?

解决方案就是接下来要讲解的ELK+Kafka日志收集的原理了。

2. ELK+Kafka日志收集原理

直接上原理图:

原理分析:从上图可以看到,首先每个应用程序使用的是Spring AOP技术来拦截日志,获取到日志之后,发布到Kafka,Kafka会推送消息给订阅者,logstash作为消息的订阅者会接收到日志信息,然后logstash会把日志写入到ES,通过Kibana我们可以可视化的实时查看日志信息,并可以以数据图标的形式展现。

我们来看下每个角色的职责:

Kafka Logstash elasticsearh kibana
用来实时接收日志和发送日志到logstash,解耦和流量削峰 logstash做日志对接,接收来自应用系统的log,然后将其写入到elasticsearch中。logstash可以支持N种log渠道,kafka渠道写进来的、和log目录对接的方式、也可以对reids中的log数据进行监控读取,等等。 elasticsearch存储日志数据,方便的扩展特效,可以存储足够多的日志数据。 kibana则是对存放在elasticsearch中的log数据进行:数据展现、报表展现,并且是实时的。

为什么要选择Kafka,而不选择其它的MQ,比如RabbitMQ和ActiveMQ呢?主要是Kafka具有以下的几个优点(下面的优点是从网上查找整理的):

  • 可扩展:Kafka集群可以透明的扩展,增加新的服务器进集群。
  • 高性能:Kafka性能远超过传统的ActiveMQ、RabbitMQ等,Kafka支持Batch操作。
  • 容错性:Kafka每个Partition数据会复制到几台服务器,当某个Broker失效时,Zookeeper将通知生产者和消费者从而使用其他的Broker。
  • 高吞吐量:keep big data in mind,kafka采用普通的硬件支持每秒百万级别的吞吐量。
  • 分布式:明确支持消息的分区,通过kafka服务器和消费者机器的集群分布式消费,维持每一个分区是有序的。
  • 持续的消息:为了从大数据中派生出有用的数据,任何数据的丢失都会影响生成的结果,kafka提供了一个复杂度为O(1)的磁盘结构存储数据,即使是对于TB级别的数据都是提供了一个常量时间性能。

讲到这里,相信大家都知道为什么分布式采集系统要使用ELK,而且为什么要选择Kafka作为MQ中间件了。

本文完!

目录
相关文章
|
消息中间件 运维 Kafka
直播预告|Kafka+Flink双引擎实战:手把手带你搭建分布式实时分析平台!
在数字化转型中,企业亟需从海量数据中快速提取价值并转化为业务增长动力。5月15日19:00-21:00,阿里云三位技术专家将讲解Kafka与Flink的强强联合方案,帮助企业零门槛构建分布式实时分析平台。此组合广泛应用于实时风控、用户行为追踪等场景,具备高吞吐、弹性扩缩容及亚秒级响应优势。直播适合初学者、开发者和数据工程师,参与还有机会领取定制好礼!扫描海报二维码或点击链接预约直播:[https://developer.aliyun.com/live/255088](https://developer.aliyun.com/live/255088)
763 35
直播预告|Kafka+Flink双引擎实战:手把手带你搭建分布式实时分析平台!
|
消息中间件 运维 Kafka
直播预告|Kafka+Flink 双引擎实战:手把手带你搭建分布式实时分析平台!
直播预告|Kafka+Flink 双引擎实战:手把手带你搭建分布式实时分析平台!
377 11
|
消息中间件 存储 缓存
大厂面试高频:Kafka 工作原理 ( 详细图解 )
本文详细解析了 Kafka 的核心架构和实现原理,消息中间件是亿级互联网架构的基石,大厂面试高频,非常重要,建议收藏。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
大厂面试高频:Kafka 工作原理 ( 详细图解 )
|
10月前
|
消息中间件 监控 Java
Apache Kafka 分布式流处理平台技术详解与实践指南
本文档全面介绍 Apache Kafka 分布式流处理平台的核心概念、架构设计和实践应用。作为高吞吐量、低延迟的分布式消息系统,Kafka 已成为现代数据管道和流处理应用的事实标准。本文将深入探讨其生产者-消费者模型、主题分区机制、副本复制、流处理API等核心机制,帮助开发者构建可靠、可扩展的实时数据流处理系统。
866 4
|
NoSQL 算法 安全
分布式锁—1.原理算法和使用建议
本文主要探讨了Redis分布式锁的八大问题,包括非原子操作、忘记释放锁、释放其他线程的锁、加锁失败处理、锁重入问题、锁竞争问题、锁超时失效及主从复制问题,并提供了相应的优化措施。接着分析了Redis的RedLock算法,讨论其优缺点以及分布式专家Martin对其的质疑。此外,文章对比了基于Redis和Zookeeper(zk)的分布式锁实现原理,包括获取与释放锁的具体流程。最后总结了两种分布式锁的适用场景及使用建议,指出Redis分布式锁虽有性能优势但模型不够健壮,而zk分布式锁更稳定但部署成本较高。实际应用中需根据业务需求权衡选择。
|
SQL 关系型数据库 MySQL
MySQL事务日志-Undo Log工作原理分析
事务的持久性是交由Redo Log来保证,原子性则是交由Undo Log来保证。如果事务中的SQL执行到一半出现错误,需要把前面已经执行过的SQL撤销以达到原子性的目的,这个过程也叫做"回滚",所以Undo Log也叫回滚日志。
997 7
MySQL事务日志-Undo Log工作原理分析
|
运维 NoSQL 算法
【📕分布式锁通关指南 04】redis分布式锁的细节问题以及RedLock算法原理
本文深入探讨了基于Redis实现分布式锁时遇到的细节问题及解决方案。首先,针对锁续期问题,提出了通过独立服务、获取锁进程自己续期和异步线程三种方式,并详细介绍了如何利用Lua脚本和守护线程实现自动续期。接着,解决了锁阻塞问题,引入了带超时时间的`tryLock`机制,确保在高并发场景下不会无限等待锁。最后,作为知识扩展,讲解了RedLock算法原理及其在实际业务中的局限性。文章强调,在并发量不高的场景中手写分布式锁可行,但推荐使用更成熟的Redisson框架来实现分布式锁,以保证系统的稳定性和可靠性。
1201 0
【📕分布式锁通关指南 04】redis分布式锁的细节问题以及RedLock算法原理
|
消息中间件 存储 缓存
一文带你秒懂 Kafka工作原理!
Apache Kafka 是一个高吞吐量、低延迟的分布式消息系统,广泛应用于实时数据处理、日志收集和消息队列等领域。它最初由LinkedIn开发,2011年成为Apache项目。Kafka支持消息的发布与订阅,具备高效的消息持久化能力,适用于TB级数据的处理。
|
存储 缓存 关系型数据库
MySQL事务日志-Redo Log工作原理分析
事务的隔离性和原子性分别通过锁和事务日志实现,而持久性则依赖于事务日志中的`Redo Log`。在MySQL中,`Redo Log`确保已提交事务的数据能持久保存,即使系统崩溃也能通过重做日志恢复数据。其工作原理是记录数据在内存中的更改,待事务提交时写入磁盘。此外,`Redo Log`采用简单的物理日志格式和高效的顺序IO,确保快速提交。通过不同的落盘策略,可在性能和安全性之间做出权衡。
2710 14
MySQL事务日志-Redo Log工作原理分析

热门文章

最新文章