- kafka 是什么?使用场景?
Kafka 是一个高吞吐的分布式消息队列系统。特点是生产者消费者模式, 先进先出(FIFO)保证顺序,自己不丢数据,默认每隔 7 天清理数据。 消息列队常见场景:系统之间解耦合、峰值压力缓冲、异步通信。 - kafka 生产消息、存储消息、消费消息
Kafka 架构是由 producer(消息生产者)、consumer(消息消费者)、 borker(kafka 集群的 server,负责处理消息读、写请求,存储消息, 在 kafka cluster 这一层这里,其实里面是有很多个 broker)、topic (消息队列/分类相当于队列,里面有生产者和消费者模型)、 zookeeper(元数据信息存在 zookeeper 中,包括:存储消费偏移量, topic 话题信息,partition 信息) 这些部分组成。
kafka 里面的消息是有 topic 来组织的,简单的我们可以想象为一个队 列,一个队列就是一个 topic,然后它把每个 topic 又分为很多个 partition,这个是为了做并行的,在每个 partition 内部消息强有序, 相当于有序的队列,其中每个消息都有个序号 offset,比如 0 到 12, 从前面读往后面写。一个 partition 对应一个 broker,一个 broker 可 以管多个 partition,比如说,topic 有 6 个 partition,有两个 broker, 那每个 broker 就管 3 个 partition。这个 partition 可以很简单想象为 一个文件,当数据发过来的时候它就往这个 partition 上面 append, 追加就行,消息不经过内存缓冲,直接写入文件,kafka 和很多消息系 统不一样,很多消息系统是消费完了我就把它删掉,而 kafka 是根据时 间策略删除,而不是消费完就删除,在 kafka 里面没有一个消费完这么 个概念,只有过期这样一个概念。
producer 自己决定往哪个 partition 里面去写,这里有一些的策略,譬 如 hash。consumer 自己维护消费到哪个 offset,每个 consumer 都 有对应的 group,group 内是 queue 消费模型(各个 consumer 消费 不同的 partition,因此一个消息在 group 内只消费一次),group 间 是 publish-subscribe 消费模型,各个 group 各自独立消费,互不影响, 因此一个消息在被每个 group 消费一次。
- kafka 的特点
1、系统的特点:生产者消费者模型,FIFO
Partition 内部是 FIFO 的,partition 之间呢不是 FIFO 的,当然我们 可以把 topic 设为一个 partition,这样就是严格的 FIFO。
2、高性能:单节点支持上千个客户端,百 MB/s 吞吐,接近网卡的极 限
3、持久性:消息直接持久化在普通磁盘上且性能好 直接写到磁盘中去,就是直接 append 到磁盘里去,这样的好处是直 接持久化,数据不会丢失,第二个好处是顺序写,然后消费数据也是 顺序的读,所以持久化的同时还能保证顺序,比较好,因为磁盘顺序 读比较好。
4、分布式:数据副本冗余、流量负载均衡、可扩展 分布式,数据副本,也就是同一份数据可以到不同的 broker 上面去, 也就是当一份数据,磁盘坏掉的时候,数据不会丢失,比如 3 个副本, 就是在 3 个机器磁盘都坏掉的情况下数据才会丢,在大量使用情况下 看这样是非常好的,负载均衡,可扩展,在线扩展,不需要停服务。
5、很灵活:消息长时间持久化+Client 维护消费状态 消费方式非常灵活,第一原因是消息持久化时间跨度比较长,一天或 者一星期等,第二消费状态自己维护消费到哪个地方了可以自定义消 费偏移量。