从零开始学kafka(1)
这个专栏的目的是为了把我在使用kafka的时候所思所想记录下来,分享给大家,然后让大家可以快速了解kafka。很多时候,大家会忽略或者轻视最基础的概念,但是其实这个才是最重要的,所以我们会由kafka的基础概念开始出发。
什么是kafka
一个分布式流式处理平台,以高吞吐、可持久化、可水平扩展、支持流数据处理等特性被广泛使用。
Kafka拥有三大功能:
- 消息系统:作为消息中间件,可以进行系统解耦、流量削峰、缓冲、异步通信、冗余存储,具有扩展性,可恢复性;同时kafka作为消息系统还可以保证消息顺序性和回溯消费。
- 存储系统:相比于其他内存存储的系统,kafka把消息持久化到磁盘,拥有消息持久化功能和多副本机制。
- 流式处理平台:kafka为流式处理框架提供数据来源,以及完整的流式处理类库。
kafka的结构
Producer:发送message并投递到broker
Broker:负责将收到的message存储到磁盘,一般一个broker就是一个实例或者一台kafka服务器
Consumer:从broker订阅并且消费message
ZooKeeper Cluster:用来负责cluster metadata的管理以及leader的选举控制等
kafka重要概念
topic:producer发送message到指定的topic(每一条message都要指定一个topic);consumer负责订阅topic进行消费(consumer通过Pull的方式拉取消息,并且保存消费的具体位置,当消费者宕机恢复后根据保存的消费位置重新拉取)
partition:
- 一个partition只属于一个topic
- 一个topic可以含有多个partition,同一个topic下的不同partition里的message是不同的
- partition在存储层面是一个可追加的log文件,message被分配到partition即log文件时都会分配一个特定的offset--消息偏移量
- offset就是kafka用来保证消息顺序执行的关键。但是offset不跨区,所以kafka只能保证partition有序,topic无法保证有序
- 同一个topic的不同partition可以在不同的broker上,message发送到broker 前,按照partition rule选择到哪个partition,可以通过增加partition数量进行水平扩展
replica:
- 即kafka的多副本机制
- 同一partition的不同replica保存相同的消息(replica之间是延时同步)
- replica结构是一主多从,leader replica负责读写请求(即与生产者和消费者交互),follower replica只负责和leader replica的消息同步,不同的replica被分配在不同的broker,当leader replica故障,从follower replica里面选举新leader对外提供服务,以此通过多副本机制实现故障自动转移
- 副本因子即副本的个数,副本会被分配在不同的broker上
AR/ISR/OSR/HW/LEO
AR:assigned replica,一个分区的所有副本
ISR:in-sync replica,在可容忍的指定的同步滞后范围内的follower replica和leader replica
OSR:out-of-sync replica,超出可容忍的同步滞后范围的folloer副本
AR=ISR+OSR
leader负责维护和跟踪ISR里的follower副本的状态,包括滞后太多踢出ISR或者跟上进度从OSR拉回ISR;leader宕机时,默认只有ISR的副本才能竞选为leader(除非改配置)
HW:high watermark--高水位,标记一个特定的offset,consumer只能拉取到这个offset之前的消息
LEO:log end offset,表示log的下一条待写入消息的offset,partition里面每个replica都会维护自己的LEO,一个partition里面的ISR里所有replica中最小的LEO就是这个partition的HW
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐


所有评论(0)