分布式消息中间件(六)——Kafka核心组件详解
来源:互联网 发布:九州通网络销售平台 编辑:程序博客网 时间:2024/06/04 03:38
一、Kafka发布订阅消息系统基础
Kafka 是分布式发布-订阅消息系统。它最初由 LinkedIn 公司开发,使用 Scala语言编写,之后成为 Apache 顶级项目框架。Kafka 是一个分布式的,可划分的,多订阅者,冗余备份的持久性的服务。
在Kafka生态架构实战中已经介绍了Kafka生态系统,伴随大数据计算,kafka作为重要的数据缓冲者,将flume收集的数据缓冲,提供给storm进行实时计算。同于storm框架,针对实时性、流式计算系统也是kafka的主要应用。它主要用于处理活跃的流式数据。
二、Kafka的特点
1、同时为发布和订阅提供高吞吐量。统计Kafka 每秒可以生产约 25 万消息(50 MB),每秒处理 55 万消息(110 MB)。
2、可持久化操作。将消息持久化到磁盘,因此可用于批量消费,通过将数据持久化到硬盘以及 replication 防止数据丢失。
3、分布式系统,易于向外扩展。所有的 producer、broker 和 consumer 都会有多个,均为分布式的。无需停机即可扩展机器。
4、kafka每个实例(broker)是无状态的,只管消息的增减,不管谁来消费,消息被处理的状态是由consumer主动从topic分区中pull消息,也就是说消息由谁消费由 consumer 决定,而不是由 server的broker决定。
三、Kafka性能测试
数据大量堆积导致broker卡死,这里就将使用到topic的分区,分散broker中的日志存储大小。
四、Kafka核心
1、Kafka核心组件
Producer:消息的生产者
Consumer:特指消息的消费者
Consumer Group:消费者组,可以并行消费Topic中partition的消息
Broker:缓存代理,Kafa 集群中的一台或多台服务器统称为 broker。
Topic:特指 Kafka 处理的消息源(feeds of messages)的不同分类。
Partition:Topic 物理上的分组,一个 topic 可以分为多个 partition,每个 partition 是一个有序的队列。partition 中的每条消息都会被分配一个有序的 id(offset)。 Message:消息,是通信的基本单位,每个 producer 可以向一个 topic(主题)发布一些消息。
Producers:消息和数据生产者,向 Kafka 的一个 topic 发布消息的过程
Consumers:消息和数据消费者,订阅 topics 并处理其发布的消息的过程
2、Kafka消息流程
(1)消息生产者Producer将消息发送到kafka broker 的Topic中(每个topic中有多个消息)
(2)每个topic中消息增多,topic中的消息进行分区,使得consumer可快速定位消费消息,也可同时消费多个分区中的数据,提高了传输速率。
(3)Consumer Group:消费者组里有多个消费者,每个消费者对应着不同partition分区中的数据处理。例如partition1的数据给Consumer 1,2给2,使得多个分区组成的topic由group中的多个consumer消费,也就是数据内部对相同message的并发处理。
3、核心组件分析
Producers
(1)消息生产者向kafka的一个topic中分布消息的过程kafka称为Producers
(2)变相的负载均衡:把消息发给topic的哪个partition里,实现对消息的均衡分发
(3)批量异步发送:producer和broker 两端(消息的客户端和服务端),不在一台服务器中,如果每产生一条消息就进行发送,建立一次网络连接,势必影响效率。Kafka的消息发送过程采取批量,异步发送。
Broker
(1)支持消息持久化:Broker没有副本备份,但kafka将消息进行持久化操作,以免丢失。当Consumer到kafka的broker中获取数据时,broker不会直接给consumer消费,而是把数据先保存到broker本地日志文件中(具体路径可配),每个Partition都会有一个log文件。另外日志的添加采用追加方式进行持久化,达到一个消息有序持久化效果。写入日志文件:缓存到一定阈值之后,再读写磁盘进行IO操作,提高性能
(2)谁消费了message,由消费者确定和维护这类信息(具体有zookeeper记录维护),broker不保存。
(5)消费时发生故障,kafka可快速定位到故障时没消费的那条数据。 consumer如何确定哪些消息是它没有消费的?zk来记录哪条消息消费情况,如何快速的找到没有消费的消息就涉及到kafka的稀疏索引机制。接下来再继续研究。
Messge
消息的3个属性:
(1)Offset 偏移量 消息的唯一标识,通过该标识找到消息。
(2)MessageSize 消息大小
(3)data 消息本身
Partition
分区的目的:
(1)减缓日志文件占用磁盘空间
大量消息,broker都要持久化到文件中,硬盘占用空间增大。分区将消息颗粒细分,每个partition可以存放在不同的硬盘空间中,避免单个broker中的topic文件侵占内存空间
(2)不同的consumer同时处理partition中的数据
Kafka中consumer与partition为 1:n的关系,即1个分区仅由1个消费者消费;1个消费者可以同时消费多个不同分区。分区细化消息粒度,消费者同时处理多个分区的越多,达到高效的消息并发处理。
- 分布式消息中间件(六)——Kafka核心组件详解
- 分布式消息中间件(七)——Kafka安装及配置详解(Linux)
- 分布式消息中间件--kafka
- kafka分布式消息中间件
- 强大的分布式消息中间件——kafka
- 强大的分布式消息中间件——kafka
- 强大的分布式消息中间件——kafka
- 分布式消息中间件(五)——MQ基础详解
- 分布式消息中间件(三)——Kafka生产者消费者模型
- 分布式消息中间件(四)——Flume+Kafka+Storm+Redis生态架构实战
- 分布式消息队列kafka系列介绍 — 配置文件详解
- 分布式消息队列kafka系列介绍 — 配置文件详解
- 分布式消息队列kafka系列介绍 — 配置文件详解
- Kafka 分布式消息系统详解
- 分布式消息队列kafka系列介绍 — 核心API介绍及实例
- 分布式消息队列kafka系列介绍 — 核心API介绍及实例
- 分布式消息队列kafka系列介绍 — 核心API介绍及实例
- Kafka、RabbitMQ、RocketMQ消息中间件的对比 —— 消息发送性能 (阿里中间件团队博客)
- 28BYJ-48步进电机原理
- 第十五周上机实践项目1(5):阅读程序
- Linux命令大全
- 【DBMS_STATS】并行和并发收集统计信息
- ZOJ 3604 Tunnel Network
- 分布式消息中间件(六)——Kafka核心组件详解
- Length of Last Word 统计最后一个字符串的长度
- leetcode 141 Linked List Cycle
- Android嵌套滑动控件的冲突解决和ViewPager适配当前子控件高度不留空白的办法
- 第十五周上机实践项目1(6):阅读程序
- 用python实现冒泡排序
- datasheet
- js图片预览
- Git学习笔记整理