天天看点

kafka学习

什么是kafka:其实就是一个分布式的消息队列.

消息(message):把各个应用给kafka发送的内容称之为消息.

topic:不同类的消息被氛围不同的topic,一个topic类似于数据库的一个表.

partition:每个topic可以被分成多个partition.写消息到topic的时候会根据分发规则写到不同的partition,每个partition中是有序的,但是多个partition之间无法保证顺序

为什么使用partition ? 1.scalable 可以根据业务量扩展多partition 2.high availablity,partitions部署在多台机器可以防止单点故障

kafka学习

producer 消息生产者,consumer 消息消费者

producer生产的消息会根据预先设定的机制来决定发送到那个partition

consumer 可以订阅多个topic的多个partition,它是通过offset来判断是否已经取得了相应的消息。

consumer group:多个consumer还可以组成一个consumer group,1个partition只能被同一个consumergroup中的1个consumer来处理。当这个consumer出现问题后,可以让consumer group中的其他consumer来继续consume 对应的partition

kafka学习

 kafka中的server即为broker,1.用来接受producer消息并增加offset 2.服务于consumer 处理consume request。 1个broker可以支持几千个partition,QPS可以达到百万

多个broker(server)就组成了1个cluster,其中一个broker(server)会被选举为controller,负责不同的partition assign给不同的broker 等。

为了高可用,partition level还可以有多个replica,leader+followers,跟数据库类似,写需要通过leader去写,但是读(consum)可以通过leader或者任一follower

kafka学习

kafka的消息可以持久保存,要保存多久可以在topic层级进行设置

有时会使用不同的cluster来隔离不同域的数据,但是不同域又有消息交互使用,那么就可以使用mirrormaker

kafka学习

1.支持多producer,多个应用可以给同一个或者不同的topic发送消息。

2.支持多consumer,可以多个consumer订阅同一个topic

3.消息磁盘持久化。

4.scalable 可以通过扩展partition/broker 增大处理能力

5.high available replica的存在确保了ha