kafka简介:
Kafka 属于分布式的消息引擎系统,它的主要功能是提供一套完备的消息发布与订阅解决方案。
kafka相关术语:
topic:发布订阅的对象就是topic,可以为每个业务、每个应用甚至是每类数据都创建专属的主题
Partitioning:分区(Kafka 中的分区机制指的是将每个主题划分成多个分区(Partition),每个分区是一组有序的消息日志。生产者生产的每条消息只会被发送到一个分区中)
Producer:向主题(topic)发布消息的客户端应用程序称为生产者
Consumer:订阅主题消息的客户端应用程序就被称为消费者
Clients:生产者和消费者统称为客户端
服务端:Kafka 的服务器端由被称为 Broker 的服务进程构成,即一个 Kafka 集群由多个 Broker 组成,Broker 负责接收和处理客户端发送过来的请求,以及对消息进行持久化,多个Broker部署在不同的服务器是实现高可用的手段之一
Replication:备份机制(备份的思想很简单,就是把相同的数据拷贝到多台机器上,而这些相同的数据拷贝在 Kafka 中被称为副本(Replica))
Replica:副本(kafka中的副本分为领导者副本(LeaderReplica)和追随者副本(Follower Replica))
LeaderReplica:领导者副本(向外提供服务,与客户端进行交互,包括接收生产者的消息以及提供消息给消费者进行消费)
FollowerReplica:追随者副本,备份消息,不与外界进行交互(向领导者副本发送消息,请求领导者把最新的生产的消息发送给它,从而保持与领导者副本同步)
Offset :位移(每条消息在分区中的位置信息由一个叫位移(Offset)的数据来表征。分区位移总是从 0 开始,假设一个生产者向一个空分区写入了 10 条消息,那么这 10 条消息的位移依次是 0、1、2、…、9。)
Consumer Group:消费群组(多个消费者实例组成一个组来消费一组主题,主要是为了提升消费者端的吞吐量。多个消费者实例同时消费,加速整个消费端的吞吐量)
Rebalance:重平衡(消费群组中内某个实例挂掉了,kafka能自动检测到然后把这个 Failed 实例之前负责的分区转移给其他活着的消费者)
Consumer Offset:每个消费者在消费消息的过程中必然需要有个字段记录它当前消费到了分区的哪个位置上,这个字段就是消费者位移
kafka的三层消息架构总结:
- 第一层是主题层,每个主题可以配置 M 个分区,而每个分区又可以配置 N 个副本。
- 第二层是分区层,每个分区的 N 个副本中只能有一个充当领导者角色,对外提供服务。其他 N-1 个副本是追随者副本,只是提供数据冗余之用。
- 第三层是消息层,分区中包含若干条消息,每条消息的位移从 0 开始,依次递增。最后,客户端程序只能与分区的领导者副本进行交互
图示:
Kafka Broker 实现持久化数据:
Kafka 使用消息日志(Log)来保存数据,一个日志就是磁盘上一个只能追加写(Append-only)消息的物理文件。因为只能追加写入,故避免了缓慢的随机 I/O 操作,改为性能较好的顺序I/O 写操作,这也是实现 Kafka 高吞吐量特性的一个重要手段。不过如果你不停地向一个日志写入消息,最终也会耗尽所有的磁盘空间,因此 Kafka 必然要定期地删除消息以回收磁盘。怎么删除呢?简单来说就是通过日志段(Log Segment)机制。在 Kafka 底层,一个日志又近一步细分成多个日志段,消息被追加写到当前最新的日志段中,当写满了一个日志段后,Kafka 会自动切分出一个新的日志段,并将老的日志段封存起来。Kafka 在后台还有定时任务会定期地检查老的日志段是否能够被删除,从而实现回收磁盘空间的目的