目录
- [1 Kafka的应用场景](#1 Kafka的应用场景)
-
- [1.1 活动跟踪](#1.1 活动跟踪)
- [1.2 消息传递](#1.2 消息传递)
- [1.3 指标和日志记录](#1.3 指标和日志记录)
- [1.4 提交日志](#1.4 提交日志)
- [1.5 流式处理](#1.5 流式处理)
- [2 Kafka的核心概念](#2 Kafka的核心概念)
-
- 消息(message)
- 键(Key)
- 批次(Batch)
- 模式(Schema)
- 主题(Topic)
- 分区(Partion)
- 分区段(Segment)
- 分区副本(Replica)
- 流(Stream)
- 生产者(Producer)
- 消费者(Consumer)
- 偏移量(Offset)
- [消费者群组(Consumer Group)](#消费者群组(Consumer Group))
- 中间人(Broker)
- 集群(Cluster)
- [控制器(Cluster Controler)](#控制器(Cluster Controler))
- [分区首领(Partition Leader)](#分区首领(Partition Leader))
- 跟随者(Follower)
- [保留消息(Message Retaintion)](#保留消息(Message Retaintion))
- [紧凑型日志(Campact Log)](#紧凑型日志(Campact Log))
- [多集群(Multiple Clusters)](#多集群(Multiple Clusters))
- ZooKeeper集群
Apache Kafka是一个开源分布式事件流平台,被数千家公司用于高性能数据管道、流分析、数据集成和关键任务应用程序。
事件流(event streaming):从技术上讲,事件流是以事件流的形式从数据库、传感器、移动设备、云服务和软件应用程序等事件源实时捕获数据的做法;持久地存储这些事件流以供以后检索;实时地以及回顾性地操纵、处理和响应事件流;以及根据需要将事件流路由到不同的目的地技术。因此,事件流确保了数据的连续流动和解释,从而使正确的信息在正确的时间、正确的地点出现。
1 Kafka的应用场景
1.1 活动跟踪
收集客户互动和订单并立即做出反应,如零售、酒店和旅游业以及移动应用程序。
实时跟踪和监控汽车、卡车、车队和货运,如物流和汽车行业。
1.2 消息传递
连接、存储公司不同部门产生的数据并使其可用。
作为数据平台、事件驱动架构和微服务的基础。
1.3 指标和日志记录
持续捕获和分析来自物联网设备或其他设备(如工厂和风电场)的传感器数据。
监测医院护理中的患者并预测病情变化,以确保在紧急情况下及时治疗。
1.4 提交日志
复制数据库提交日志到远程系统。
合并数据库更新。
恢复系统。
1.5 流式处理
实时处理支付和金融交易,例如在证券交易所、银行和保险中。
2 Kafka的核心概念
消息(message)
Kafka的数据单元称为消息。
键(Key)
消息可以包含一个可选的元数据,就是键。键被用于决定消息被分配到哪个分区,例如键的摘要值相同的消息存入同一个分区。
批次(Batch)
为了提高效率,消息会被分为批次写入Kafka。批次包含了一组属于同一个主题,同一个分区的消息。
模式(Schema)
对Kafka来说,不论任何消息都作为字节数组存储。但是对不同的应用程序来说,消息是有不同的格式的。所以需要在消息的处理过程中用消息模式来描述消息的格式。常见的模式有JSON,XML,AVRO等。
主题(Topic)
主题用来分类消息。
分区(Partion)
主题被非为若干个分区,一个分区就是一个提交日志。
- 不同的分区可以部署在不同的服务器上。
- 消息以追加的方式写入分区,已先进先出的方式读取。
- 在主题范围内无法保证消息的顺序,在单个分区中可以。所以如果向严格保证消息的处理顺利,可以只使用一个分区,或者所有消息的键保持一致,获取自定义分区规则。
分区段(Segment)
一个分区又被分为多个段(segmnet),一个段就是一个日志文件。
分区副本(Replica)
一个分区可以被复制多分,并部署在不同的服务器上。实现数据的冗余和伸缩。
流(Stream)
流是一组从生产者移动到消费者的数据。
生产者(Producer)
Kafka的客户端有两种类型:生产者和消费者。生产者创建消息。
消费者(Consumer)
消费者读取消息。消费者订阅不同的主题,并按照写入顺序读取。消费者通过偏移量来区分已经读取过的消息。
偏移量(Offset)
一种元数据,递增的长整形。Kafka写入消息时指定,并保存在一个内部主题(_consumer_offsets)中,保证消费者关闭后,读取状态不变。
消费者群组(Consumer Group)
一个消费者群组包含多个消费者,属于同一个群组的消费者共同读取一个主题时,Kafka能保证一个分区同时只被同一个消费者群组中的一个消费者读取。但是其他群组的消费者还可以读取这个分区。
中间人(Broker)
一个单独的Kafka服务器被称为broker。它接收生产者的消息,设置偏移量,并保存到磁盘;它同时响应消费者的请求,并返回已发布的消息。
集群(Cluster)
多个broker组成一个集群。
控制器(Cluster Controler)
每个集群都有一个broker充当控制器的角色,通过选举产生生。它的职责为:
- 为broker分配分区
- 监控broker
分区首领(Partition Leader)
一个分区从属于一个broker,称为分区首领。
跟随者(Follower)
一个分区的其他副本被分配给不同的broker,这些broker被称为追随者。
保留消息(Message Retaintion)
消息在Kafka中默认保留7天或者数据量达到1G。
紧凑型日志(Campact Log)
有些数据只需要保留最新的值,例如指标,所以可以把主题配置生紧凑型日志,只有最有一条指定键的消费会被保留下来。
多集群(Multiple Clusters)
使用多集群的原因:
- 数据类型分离
- 安全需求隔离
- 多数据中心(灾难恢复)
Kafka提供了一个叫做MirrorMaker的数据镜像工具,用来在不同的集权之间同步数据。
ZooKeeper集群
Kafka使用ZooKeeper维护集权的成员信息,它起到了两个重要作用:
- 选举控制器
- 保存集群元数据:broker,配置,主题,分区,副本。