这是我参与8月更文挑战的第30天,活动详情查看:8月更文挑战
今天来一起聊聊 Kafka 基础知识。
1、Kafka 诞生的背景
LinkedIn 需要捕获数据并将这些巨量的数据以可靠的、完整的数据流方式传递给数据分析处理系统。
Kafka 作为 LinkedIn 的“中枢神经系统”,管理从各个应用程序汇聚到此的信息流,经处理后分发到各处。同时作为消息系统,进行消息的传递;同时也是日志存储系统,以日志的形式存储了数据源的所有数据。
2、Kafka 在 LinkedIn 的应用
管理信息流的开源解决方案:作为消息中枢,各应用以松耦合方式一起工作。
主要使用场景:系统监控;传统消息队列;分析;其他分布式日志系统组件;MirrorMaker(kafka 集群间同步数据);Restful 接口;审计服务。
3、Kafka 主要设计目标
1)以时间复杂度 O(1)的方式提供消息持久化能力,即使应对 TB 级以上的数据也能保证常数时间的访问性能
2)高吞吐率,即使廉价的商用机器上也能做到单机支持 100K/s 条消息的传输
3)支持 Kafka Server 间的消息分区,分布式消费,同时保证每个分区内消息顺序传输
4)支持离线数据处理和实时数据处理
5)支持在线水平扩展
4、为什么要使用消息系统
1)解耦
2)冗余 消息队列把数据进行持久化直到数据完全处理完,规避数据丢失风险
3)扩展性 基于解耦,可以增加消息入库和处理的频率
4)灵活性和峰值处理 削峰
5)可恢复性
6)顺序保证
7)缓冲
8)异步通信
5、Kafka 基本组成
生产者 — 将消息发送给以 Topic 命名的消息队列 Queue 中
消费者 — 订阅以 Topic 命名的消息队列 Queue 中的消息
Kafka 集群由多个 Broker 组成,Topic 由多个 Partition 组成,每个 Partition 里的消息通过 Offset 来获取。
1)Broker:一台 kafka 机器就是一个 Broker,一个集群由多个 Broker 组成,一个 Broker 可以容纳多个 Topic,每个 Broker 之间地位平等。
2)Topic:物理上不同 Topic 的消息分开存储,逻辑上一个 Topic 虽然保存在一个或多个 Broker 上,但是用户指定 Topic 即可生成或消费,而不需要关心数据存放何处;
3)Partition:为了可扩展性,一个大的 Topic 会被分为多个 Partition,从而分布到多台 Broker 上。Partition 中的每条消息都会被分配一个自增 Id(offset),Kafka 只保证按一个 Partition 中的顺序将消息发送给消费者,但不保证单个 Topic 中的多个 Partition 间的顺序;
4)Offset:消息在 Topic 的 Partition 中的位置。同一个 Partition 中的消息随着消息的写入,其对应的 Offset 也自增
5)Replica:副本。Topic 的 Partition 含有 N 个 Replica,N 为副本因子。其中一个 Replica 为 Leader,其他都为 Follower,Leader 处理 Partition 的所有读写请求,Follower 会定期同步 Leader 上的数据。
6)Message:消息,通信的基本单元。每个 Producer 可以向一个 Topic 发布一些消息。
7)Producer:消息生产者
8)Consumer:消息消费者
9)Consumer Group:消费者组,每个 Consumer 属于一个 Consumer Group;反过来,每个 Consumer Group 中可以包含多个 Consumer。一个 Partition 中的消息只会被相同的 Consumer Group 中的某个 Consumer 消费,每个 Consumer Group 消息消费是相互独立的。
10)Zookeeper:存放 kafka 集群相关元数据的组件。会保存 Topic 的状态信息,例如:分区个数,分区组成,分区的分布情况等;保存 Broker 的状态信息;保存消费者的消费信息。通过这些,kafka 可以很好的将消息生产、存储、消费过程结合起来。
- END -
作者:架构精进之路,十年研发风雨路,大厂架构师,CSDN 博客专家,专注架构技术沉淀学习及分享,职业与认知升级,坚持分享接地气儿的干货文章,期待与你一起成长。
关注并私信我回复“01”,送你一份程序员成长进阶大礼包,欢迎勾搭。
Thanks for reading!