听说点赞关注的人,身体健康,一夜暴富,升职加薪迎娶白富美!!!
微信公众号:耿子blog
目标
-
了解kafka消息引擎
参考:Apache kafka 实战 书籍
kafka 基础概念
消息队列
存放消息的容器,需要数据去消息队列中拿数据消费。
作用: 适用多服务的分布式系统
-
通过异步处理提供系统性能和消峰
在高并发下(比如秒杀,促销活动),将用户请求的消息数据存储在消息队列中,避免对数据库直接访问,在后续服务中,读取消息队列中的数据,进行处理。
-
降低系统的耦合度
将本来互相耦合的业务,拆分成生成者和消费者,提供系统的扩展性
引入消息队列带来的问题:
- 系统可用性降低
- 系统复杂性提高
- 一致性问题
kafka 概念
kafka是一个消息引擎,特点:超高的吞吐量,ms 级的延迟,支持消息的持久化,极高的可用性以及可靠性,而且分布式可以任意扩展。
提供两种消息模式:
-
队列(message queue)
p2p 点对点的传递方式,一个生产者对应一个消费者,消费者消费一条数据,从队列中移除
-
发布者/订阅者(publish/subscribe)
发布者将消息,发布的一个主题(topic),订阅者从这个主题订阅消息。
使用kafka的工作流程:
生产者——》kafka——》消费者
kafka本身依托于zookeeper 注册中心,进行服务的协调管理
kafka 术语
-
消息组成: key 消息键(可以用来指定消息保存到某个topic下的那个partition 中), value 消息体(实际的消息数据),Timestamp 消息发送的时间戳
-
topic 主题 和 分区 partition
topic 是数据主题,包含一系列数据,用来区分不同的业务系统
比如 业务A 用一个 topic ,业务B 用另一个 topic
一个topic 包含一个或者多个 Partiton 分区
每个 Partiton 都有自己的Partiton 号,通常从0开始,Partiton 是一个消息序列,每次生产一条消息,都会放置到 Partiton 中,并在序列末尾追加,每条消息也都会分配一个唯一的序列号(offset),也称之为位移(offset)
-
位移 (序列号 offset)
offset用来唯一的标识分区中每一条记录
-
消费者的偏移量
在每一个消费者中唯一保存的元数据是offset(偏移量),偏移量由消费者所控制。消费者可以采用任何顺序来消费记录。例如,一个消费者可以重置到一个旧的偏移量,从而重新处理过去的数据;也可以跳过最近的记录,从"现在"开始消费。
-
broker
可以认为单机版的kafka服务器
-
容错性
在kafka集群中,每一个分区都会在已配置的服务器上进行备份,确保容错性.
每个分区都有一台 server 作为 “leader(领导)”,零台或者多台server作为 follwers(追随者) 。leader server 处理一切对 partition (分区)的读写请求,而follwers只需被动的同步leader上的数据。当leader宕机了,followers 中的一台服务器会自动成为新的 leader。每台 server 都会成为某些分区的 leader 和某些分区的 follower,因此集群的负载是平衡的。
-
生产者
生产者可以将数据发布到所选择的topic(主题)中。生产者负责将记录分配到topic的哪一个 partition(分区)中。可以使用循环的方式来简单地实现负载均衡,也可以根据某些语义分区函数(例如:记录中的key)来完成。
-
消费者
消费者使用一个 消费组 (Group)名称来进行标识,消费者组包含了多个消费者实例。
topic中的每条记录只会被发送到每个订阅它的消费组中的一个消费者实例上。
也就是说 ,对于同一个group 来说,topic 每条消息只能发送到一个group 中的一个 consumer 实例上。
但是topic 中的消息可以被发送到多个 group 中
对于 Group A ,有c1 c2 两个消费者,对于同一个 topic 四个分区,只有两个消费者,根据平衡算法,规定了c1从p0 和 p3 分区消费数据,c2 从p1 和 p2 消费数据,而Group B 组中,有四个消费者,就规定了每个消费者从每个分区中消费数据
kafka 的使用场景
参考:Use cases
-
消息传输
将数据生成器与数据处理解耦,缓冲未处理的消息
-
跟踪网站活动
网站活动(浏览网页、搜索或其他的用户操作)将被发布到中心topic,其中每个活动类型有一个topic。 这些订阅源提供一系列用例,包括实时处理、实时监视、对加载到Hadoop或离线数据仓库系统的数据进行离线处理和报告等
-
监控数据
从分布式应用程序中汇总数据
-
日志聚合
-
采集日志
-
流处理
导航栏
下一篇:Kafka 入门二 安装与启动