kafka之关联应用系统的系统架构
2022-10-05 本文已影响0人
每天进步一点点变成更好的自己
数据从哪里来,大数据系统的框架,kafka如何连接我们的应用系统、大数据批处理系统、大数据流式处理系统,kakfa系统的设计,和传统的消息队列系统区别,以及为什么kafka要这样设计。
kafka的假设:我们处理的互联网领域的海量日志,对于丢失一部分日志是可以容忍的,但是整体关注的是系统整体的吞吐量、可扩展性、以及错误恢复能力。
1.大数据系统框架
日志系统
2.kafka的系统架构
kafka可以看成一个日志收集器,上游的应用服务器把日志发送到kafka集群,kafka的下游,不仅能能把对应的数据存到HDFS上,还可以直接从kafka里获得数据。kafka的模型:生产者-消费者。
- 生产者
首先是producer,日志的生产者,即应用服务器。应用服务器生成日志,作为生产者,把日志发送到kafka系统中去。 - Broker
kafka的服务进程,为了容错和高可用,kafka是一个分布式的集群,每台服务器都有对应的broker的进程。kafka对所有的消息,进行两者类型的分组:业务分组和数据分区。
业务分组:对应TOPIC,比如有广告日志、搜索日志。
数据分区:分区可以帮助我们水平扩展系统的处理能力。同一个TOPIC的日志,平均分配到多台服务器上。
Broker会在内存里维护一个简单的索引,即通过虚拟的偏移量,执行一个具体的segment文件。通过找到segment文件,然后去读取数据就好了。 - 消费者
实际去处理日志的消费者。我们去读取kafka数据,把它放到HDFS上的程序,就是一个消费者。
3.kakfa的单个partition的读写实现
在实际的实现上,每一个TOPIC都会有很多个分区,分区到不同的服务器上。一个物理机,会存在很多分区。实际存储的时候,一个分区存储的是一个逻辑上的日志系统,在物理上,这些日志未见会分成大小相同的segment文件(比如1GB大小),每当有新消息从producer发过来的时候,broker就会把消息追加写入到最后那个segment文件里。
partition是一个逻辑上的日志文件,在物理上会拆分成多个同样大小的segment文件,顺序存储日志4.kafka文件系统
kafka是直接使用本地的文件系统承担了消息队列持久化的功能,即直接依赖了linux文件系统的页缓存(page cache)。
kakfa直接通过mmap来写入数据,使得数据读写的性能很好