kafka原理及设计思想

1.基本介绍
kafka是一个分布式消息系统中间件,主要在分布式环境下为各个系统提供消息传递服务。其最令人印象深刻的特点是高吞吐量、超强消息堆积、持久化能力、快速的消息get、put。
基本介绍环节对kafka的主要组成部分以及一些名字做一些解释。
PS: 我们这里部分设置细节以kafka.0.10.x为例
1.1 consumer,producer,broker

从上图可以看到kafka的核心组件是Producer、broker和consumer。其名次定义如下:
  1. Consumer:用于从Broker中取出/消费Message。
  2. Producer:用于往Broker中发送/生产Message。
  3. Broker:Kafka中使用Broker来接受Producer和Consumer的请求,并把Message持久化到本地磁盘。每个Cluster当中会选举出一个Broker来担任Controller,负责处理Partition的Leader选举,协调Partition迁移等工作。
注意:以上组件在分布式环境下均可以是多个,支持故障转移。同时ZK仅和broker和consumer相关。值得注意的是broker的设计是无状态的,消费的状态信息依靠消费者自己维护,通过一个offset偏移量。client和server之间通信采用TCP协议。
1.2 topic和partition


该图可以看到,消息是按照主题来提交到Partition当中的。Partition当中的消息是有序的,consumer从一个有序的分区消息队列中顺序获取消息。相关名次定义如下:
1.Topic:用于划分Message的逻辑概念,一个Topic可以分布在多个Broker上。
2.Partition:是Kafka中横向扩展和一切并行化的基础,每个Topic都至少被切分为1个Partition。
3.offset:消息在Partition中的编号,编号顺序不跨Partition。

总结如下:
1.分区目的:Kafka中采用分区的设计有几个目的。一是可以处理更多的消息,不受单台服务器的限制。Topic拥有多个分区意味着它可以不受限的处理更多的数据。第二,分区可以作为并行处理的单元。
2.offset:由消费者控制offset,因此分区本身所在broker是无状态的。消费者可以自由控制offset,很灵活
3.同个分区内有序消费:每一个分区都是一个顺序的、不可变的消息队列, 并且可以持续的添加。分区中的消息都被分配了一个序列号,称之为偏移量(offset),在每个分区中此偏移量都是唯一的。
1.3 partition复制
每个分区都有自己的镜像分区,来保证分区的高可用。其中一个称为leader。如果leader挂掉了,也会有相应的选举算法来选新的leader。
1.Replication:Kafka支持以Partition为单位对Message进行冗余备份,每个Partition都可以配置至少1个Replication(当仅1个Replication时即仅该Partition本身)。
2.Leader:每个Replication集合中的Partition都会选出一个唯一的Leader,所有的读写请求都由Leader处理。其他Replicas从Leader处把数据更新同步到本地,过程类似大家熟悉的MySQL中的Binlog同步。
3.ISR(In-Sync Replica):是Replicas的一个子集,表示目前Alive且与Leader能够“Catch-up”的Replicas集合。由于读写都是首先落到Leader上,所以一般来说通过同步机制从Leader上拉取数据的Replica都会和Leader有一些延迟(包括了延迟时间和延迟条数两个维度),任意一个超过阈值都会把该Replica踢出ISR。每个Partition都有它自己独立的ISR。

1.4 消费者组
消费者组提供两种消费TOPIC的方式:
  1. 只有一个消费者组:保证消费者组内负载均衡的读取消息
  2. 多个消费者组:每个消费者组理解为一个独立的个体看成订阅了tipic。下图可以看到分区上的消息会完整、负载均衡地广播给一个消费者组内的消费者
1.5 消息分发语义(消息可靠性问题)
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值