kafka

一、消息队列的流派

  • 有broker的MQ
    • 重Topic(必须有topic) :kafka
    • 轻Topic
  • 无broker的MQ

kafka_第1张图片

 二、kfka基本概念

kafka_第2张图片

kafka_第3张图片

三、demo——生产者和消费者——单机

官方demo;:Apache Kafka

kafka_第4张图片

消费者有两种消费的方式,如下:

kafka_第5张图片

 PS:消息不是和socket通信一样发完以后关掉server和client就没有了的,而是保存在kafka服务器上。具体位置可以自己指定。

kafka_第6张图片

单播和多播(其实是一个东西)

单播:对于同一个consumerGroup里订阅了同一个topic的消费者们,只有一个consumer能收到producer发送的消息,而且是最新加入的那个consumer。

PS:consumer1和consumer2在一个组里(运行时指定的,截图的时候可能被挡住了)

多播:不同的consumerGroup组订阅同一个topic,那么每个组里只有一个consumer能收到消息。

kafka_第7张图片

 Topic分区

一个topic生产的消息都存在本地文件中(00000.log文件),这个文件可能有几T那么大,一个磁盘放不下。

kafka_第8张图片

所以要进行分区存放!除此之外,分区还有一个好处。之前只放在一个文件的时候,一次只能有一个producer去写这个文件,但是分区以后, 读写可以并行了!

kafka_第9张图片

 四、搭建kafka集群

以3个broker(kafka)节点的集群为例,这里我们用3个端口代表3个节点,就不开3个服务器了

要新建3个server.properties文件

kafka_第10张图片

        然后启动3个节点

         有了集群以后,创建topic的时候可以指定生成副本(也就是备份),一共有3个节点,也就可以有3个备份。

kafka_第11张图片

         而且kafka会自动指定哪个节点作为leader,leader可以理解为MySQL主从复制的master,以leader节点存储的信息为主,producer也只往leader节点上发消息,不是3个节点都发,同样consumer也只去读leader节点上的消息,其他两个节点去同步/拷贝leader的信息!其他两个节点只是在leader挂了的时候才能用到,这又涉及到了选举的问题,以后再说选举策略!

        如上图所示,名为my-replicated-topic的topic有两个分区,partition0和partition1,这两个分区各自都有3个副本,其中partition0的leader是2号节点,partition1的leader是0号节点,示意如下:

kafka_第12张图片

你可能感兴趣的:(kafka,分布式)