最近刚开始学习中间件,对于其中理解有误的地方,望各位大侠指正,相互学习。
Filebeat
Filebeat是一个日志文件托运工具,在你的服务器上安装客户端后,filebeat会监控日志目录或者指定的日志文件,追踪读取这些文件(追踪文件的变化,不停的读),并且转发这些信息到MQ中间件,或者直接到elasticsearch或者logstarsh中存放。
工作流程:
1、 filebeat启动一个或多个探测器(prospectors)
2、 filebeat启动收割进程(harvester)
3、 发送这些新的日志数据到处理程序(spooler)
4、 Filebeat输出集合的数据
Kafka
Kafka常被用于消息中间件使用。
官方文档介绍
ApacheKafka是一个分布式流媒体平台。
流媒体平台有三个关键功能:
- 发布和订阅记录流,类似于消息队列或企业消息传递系统。
- 以容错的持久方式存储记录流。
- 记录发生时处理流。
消息队列
队列:先进先出的数据结构。
消息队列:将要传输的数据放在队列中。
Tips:
生产者:将数据放至消息队列
消费者:从消息队列里取数据
为什么需要使用消息队列?
- 解耦 --减少系统之间的相互调用,对数据的存取通过消息队列实现
- 异步
- 削峰与限流 --用于高并发
需要解决的问题
- 高可用
通过集群部署实现,非单机 - 数据丢失
1.事务机制 --太耗性能,同步
2.Confirm机制(推荐) --接收消息回调,设置接收时间,异步 - 消费者怎么从消息队列中得到数据?
生产者通知/消费者不断刷新等候
应用场景
- 系统或应用程序之间获取实时性数据的管道
- 转换或响应数据流的实时流应用程序
理解
- Kafka作为一个集群运行在一个/多个服务器上
- Kafka集群以主题(topic)的类型存放数据流
- 每条记录由一个键,一个值和一个时间戳组成
常用API
- Producer API 生产者
- Consumer API 消费者
- Streams API 流
- Connector API 连接
组件理解
介绍kafka中的关键性组件或者组成
主题,分区日志
主题是发布记录的类别或者订阅源的名称。Topic一般对应的是多个消费者。当然也可以没有,或者单个消费者。
- 对于每个主题,kafka集群都维护着下图的分区日志。每一个主题都有具有分区。
每一个主题都有多个分区(Partition),分区中的每一条记录都有唯一ID标志。可以通过配置消息的存放时间,持久性的保留记录。 - 消费者可以调整偏移量去读取记录。例如:消费者可以重置旧的偏移量,或者跳到最近的记录开始获取记录。
分配
每一个分区都有一个服务器做为leader,0或者多个follower,Leader负责处理分区的读取与写入。每个服务器都充当着一个分区的leader或者其他服务器的follower,以此达到负载均衡。
生产者
生成者负责将数据发布至其选择的主题的,并选择那一条数据分配到哪一个分区,以实现平衡负载。
消费者
消费者对应着消费者组名。消费者组中的一个实例负责接收被传递到消费者组的记录,消费者实例可以在单独的进程中,也可以在不同的机器上。
- 消费者实例具有相同的消费者组,记录在消费者实例上负载均衡
- 消费者实例不具备相同的消费者组,则每个记录将广播至每一个消费者进程
特点
介绍kafka的特点,主要为消息系统,数据存储,并行性,流处理
消息系统
传统的消息模型:排队,发布-订阅
- 排队:可拓展处理,无并发
- 发布-订阅:无法拓展处理
Kafka结合这两种模型,即消费者组,可以对用户组进行扩展处理,另外,与发布-订阅模型一样,kafka可以向多个消费者组广播消息。
并行性
多消费者组,多主题,主题多分区。
每一个消费组对应一个主题,每个主题对应着多个日志分区,由于每一个主题的每一个分区都只有一个消费者,并按顺序的使用数据,每个主题都许多分区,这任然可以平衡多消费者实例的负载。
消费者实例不能多与分区数。理论上分区数为消费者线程数。
数据存储
- Kafka数据存放与消费之间实现解耦,作为实时消息存放系统。
- 数据存放在磁盘,并进行复制以实现容错。
- 允许生产者进行等待确认,直到数据被存放至磁盘,并完成复制。
- 允许消费者选择读取数据的位置,进而作为一种高性能,低延迟提交日志存储,复制和传播的专用分布式文件系统。
数据存储
仅仅读取,写入和存储数据流是不够的,目的是实现流的实时处理。
在Kafka中,流处理器是指从输入主题获取连续数据流,对此输入执行某些处理以及生成连续数据流以输出主题的任何内容。