kafka是什么?
kafka是一个分布式的消息系统(发布/订阅)
kafka的特点
- 以时间复杂度为O(1)的方式提供消息持久化能力,即对TB级以上的数据进行访问也能达到常数时间复杂度的访问性能
- 解耦
- 顺序性:保证分区内有序
- 可恢复性(容错性):部分组件的失效,不会导致影响整个系统
- 异步通信:允许用户把消息发生到消息队列中,并不立即处理
- 能同时实现离线和实时处理
kafka架构图
图画的有点丑,就将着看吧
kafka架构组件
producer
生产者,向kafka服务器发布消息(采用push的方式将消息推送到broker)
broker
kafka服务器,一个broker中可以有多个topic,一个topic中可以有多个partition
- topic
- partition
- repica(副本):保障partition的高可用性
- leader:producer/consumer只与leader交互;当leader宕机选举时,新的leader拥有旧leader commit过的所有消息
- follower:从leader复制数据
- repica(副本):保障partition的高可用性
- partition
consumer
消费者,订阅broker中的topic,通过pull的方式获取消息。其API分为高级API和低级API
- 高级API
- 优点:写起来简单;不用自行管理offset,系统通过zookeeper自行管理(每次获取数据后,线程将自动提交offset到zookeeper)
- 缺点:不能自由控制offset
- 低级API
- 优点:能自由控制offset
- 缺点:写起来比较麻烦,容易出现重复消费等问题
consumer group
由一个或多个consumer组成,当有consumer增加或减少时,会触发rebalance机制。
一个partition只能被同一个group内的一个consumer消费,但多个group可以同时消费这个partition
zookeeper
主要有两个作用:a. 存储集群meta信息;b. 监控集群状态