Apache Kafka是一款开源的消息引擎系统
Apache Kafka是消息引擎系统,也是一个分布式流处理平台(Distributed Streaming Platform)
Kafka是一种分布式的基于订阅/发布的消息队列,主要应用基于大数据的实时处理领域。
异步处理
使用消息队列好处
解耦
可恢复性
缓冲
灵活性&峰值处理能力
Kafka同时支持这两种消息引擎模型
参考 https://cloud.tencent.com/developer/article/1558847
1、点对点模式(一对一)
消息生产者发送到Queue中,然后消息消费者从Queue中取出来且消费消息。消费后,消息不再存储。Queue支持多个消费者,但对于一个消息来说,只会有一个消费者可以消费
2、发布/订阅模式(一对多)
生产者将消息发布到topic上,同时会有多个消费着(订阅)消费该消息。发布到topic的消息会被所有订阅者消费
kafka是发布订阅模式中消费者主动拉去(另一种是队列推)
维护一个长轮训,询问是否有新消息
Kafka是消息引擎,这里的消息就是指Kafka处理的主要对象。
发布订阅的对象是主题(Topic),主题是承载消息的逻辑容器,在实际使用中多用来区分具体的业务。可以为每个业务、每个应用甚至是每类数据都创建专属的主题。
主题就好比数据库的表,或者文件系统里的文件夹。
一个有序不变的消息序列。每个主题下可以有多个分区。
主题可以被分为若干个分区,提高主题的负载均衡,一个分区就是一个提交日志。消息以追加的方式写入分区,然后以先入先出的顺序读取。要注意,一个主体一般包含几个分区,因此无法在整个主题范围内保证消息的顺序,但可以保证消息在单个分区内的顺序。
创建消息。向主题发布消息的客户端应用程序称为生产者(Producer),生产者程序通常持续不断地向一个或多个主题发送消息
读取消息 订阅这些主题消息的客户端应用程序就被称为消费者(Consumer),
和生产者类似,消费者也能够同时订阅多个主题的消息。我们把生产者和消费者统称为客户端(Clients)
消费者是消费群组的一部分,也就是说,会有一个或者多个消费者共同读取一个主题。一个分区只能被一个消费者组里面的消费者消费
消费者组 --提高消费能力
一个独立的kafka服务器被称为broker。broker接收来自生产者的消息,为消息设置偏移量,并对消息进行持久化(提交消息到磁盘保存)。broker是集群的组成部分。每个集群都有一个broker充当了集群控制器的角色
生产者和消费者统称为客户端(Clients)broker就是服务器端
表示分区中每条消息的位置信息,是一个单调递增且不变的值。
是一种元数据,它是一个不断递增的整数值,在创建消息是,kafka会把它添加到消息里。在给定的分区里,每个消息的偏移量都是唯一的。消费者把每个分区的最后读取的消息偏移量保存在ZK或者kafka上,如果消费者关闭或重启,它的读取状态不会丢失。
表征消费者消费进度,每个消费者都有自己的消费者位移。
多个消费者实例共同组成的一个组,同时消费多个分区以实现高吞吐
Kafka中同一条消息能够被拷贝到多个地方以提供数据冗余,这些地方就是所谓的副本。副本还分为领导者副本和追随者副本,各自有不同的角色划分。副本是在分区层级下的,即每个分区可配置多个副本实现高可用。
消费者组内某个消费者实例挂掉后,其他消费者实例自动重新分配订阅主题分区的过程。Rebalance是Kafka消费者端实现高可用的重要手段。
至此我们能够完整地串联起Kafka的三层消息架构:
第一层是主题层,每个主题可以配置M个分区,而每个分区又可以配置N个副本。
第二层是分区层,每个分区的N个副本中只能有一个充当领导者角色,对外提供服务;其他N-1个副本是追随者副本,只是提供数据冗余之用。
第三层是消息层,分区中包含若干条消息,每条消息的位移从0开始,依次递增。
最后,客户端程序只能与分区的领导者副本进行交互
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。