【菜鸟教程】Kafka消息队列入门上(安装、集群搭建、基本命令行操作)

概述

定义

Kafka 是一个分布式的基于发布/订阅模式消息队列(Message Queue),主要应用于大数据实时处理领域。


消息队列

什么是消息队列呢?

例如在网站注册时,一般是同步的,当接收到短信后网页才会提示注册成功。如果使用消息队列就可以实现异步处理,发送短信和页面注册成功响应是异步的,不必等到发送了短信才会响应。

可以参照下图来理解消息队列的作用:
在这里插入图片描述

消息队列的优点

  • 解耦
    允许独立扩展或修改两边的处理过程,只要确保它们遵守同样的接口约束。
  • 可恢复性
    系统的一部分组件失效时,不会影响到整个系统。消息队列降低了进程间的耦合度,所以即使一个处理消息的进程挂掉,加入队列中的消息仍然可以在系统恢复后被处理。
  • 缓冲
    有助于控制和优化数据流经过系统的速度,解决生产消息和消费消息的处理速度不一致的情况,主要是生产消息的速度>消费消息的速度的情况。
  • 灵活性 & 峰值处理能力
    在访问量剧增的情况下,应用仍然需要继续发挥作用,但是这样的突发流量并不常见。如果为以能处理这类峰值访问为标准来投入资源随时待命是很浪费的,使用消息队列能够使关键组件顶住突发的访问压力,而不会因为突发的超负荷请求而崩溃。
  • 异步通信
    很多时候用户不想也不需要立即处理消息。消息队列提供了异步处理机制,允许用户把一个消息放入队列但并不立即处理它。想向队列中放入多少消息就放多少,然后在需要的时候再去处理它们。

消息队列的两种模式:

点对点模式(一对一,消费者主动拉取数据,消息收到后消息清除)

消息生产者生产消息发送到Queue中,然后消息消费者从Queue中取出并且消费消息。
消息被消费以后,queue 中不再有存储,所以消息消费者不可能消费到已经被消费的消息。Queue 支持存在多个消费者,但是对一个消息而言,只会有一个消费者可以消费。
在这里插入图片描述

发布/订阅模式(一对多,消费者消费数据之后不会清除消息)

消息生产者(发布)将消息发布到 topic 中,同时有多个消息消费者(订阅)消费该消
息。和点对点方式不同,发布到 topic 的消息会被所有订阅者消费。
在这里插入图片描述


基础架构

在这里插入图片描述

  • Producer :消息生产者,就是向 kafka broker 发消息的客户端。
  • Consumer :消息消费者,向 kafka broker 取消息的客户端。
  • Consumer Group (CG):消费者组,由多个 consumer 组成。消费者组内每个消费者负责消费不同分区的数据,一个分区只能由一个组内消费者消费;消费者组之间互不影响。所有的消费者都属于某个消费者组,即消费者组是逻辑上的一个订阅者。
  • Broker :一台 kafka 服务器就是一个 broker。一个集群由多个 broker 组成,一个 broker可以容纳多个 topic。
  • Topic :主题,可以理解为一个队列,生产者和消费者面向的都是一个 topic。
  • Partition:分区,为了实现扩展性,一个非常大的 topic 可以分布到多个 broker(即服务器)上,一个 topic 可以分为多个 partition,每个 partition 是一个有序的队列。
  • Replica:副本,为保证集群中的某个节点发生故障时,该节点上的 partition 数据不丢失,且 kafka 仍然能够继续工作,kafka 提供了副本机制,一个 topic 的每个分区都有若干个副本,一个 leader 和若干个 follower。
  • leader:每个分区多个副本的“主”,生产者发送数据的对象,以及消费者消费数据的对象都是 leader。
  • follower:每个分区多个副本中的“从”,实时从 leader 中同步数据,保持和 leader 数据的同步。leader 发生故障时,某个 follower 会成为新的leader。
  • offset:帮助消费者存储消费到的位置信息,0.9版本之前存在zookeeper,由于消费者本身要与Kafka通信,又要维护和zookeeper的连接,跟zookeeper的通信将过于频繁,效率不高,也会增加zookeeper的压力,所以之后存在Kafka本地磁盘。

快速入门

下载

下载地址:https://mirrors.cnnic.cn/apache/kafka/2.1.1/
下载二进制文件
在这里插入图片描述

安装和配置

在虚拟机中找到自己的ip地址,在windos端连接
在这里插入图片描述
把下载好的二进制文件传到虚拟机
在这里插入图片描述
解压Kafka到opt/modlue文件夹内:tar -zxvf kafka_2.11-2.1.1.tgz -C /opt/module/
在这里插入图片描述
关于tar的命令的一些说明,具体可参考之前写的linux入门笔记
在这里插入图片描述
解压后重命名为Kafka1,然后复制两份
在这里插入图片描述
接下来还是用图形化操作吧 直观一点…首先进入kafka1/config配置目录下修改server文件,broker.id设为0,端口设为9092
在这里插入图片描述

在kafka1下创建一个logs目录
在这里插入图片描述
然后修改server文件内的数据和日志存储目录
在这里插入图片描述
最后找到zookeeper,修改配置的集群地址,我本机的集群地址分别是端口2181,2182,2183
在这里插入图片描述
之后对kafka2和kafka3重复以上操作,但是把broker.id分别设为1和2,端口设为9093和9094


启动本机的zookeeper集群,ip地址变了,害我还修改了3个配置文件…
在这里插入图片描述
以守护进程的方式启动Kafka:
在kfka目录下打开终端输入:bin/kafka-server-start.sh -daemon config/server.properties
关闭Kafka:
在kfka目录下打开终端输入:bin/kafka-server-stop.sh
对三个kafka目录下都要进行此操作:
在这里插入图片描述


基本命令行操作

查看当前服务器所有topic

bin/kafka-topics.sh --list --zookeeper localhost:2181

--list 代表查看topic,zookeeper后跟zookeeper服务器的ip地址,由于Kafka是新搭建的,所以还没有任何topic。
在这里插入图片描述


创建topic
bin/kafka-topics.sh --create --zookeeper localhost:2181 --topic name --partitions 2 --replication-factor 2

--create表示创建topic,--topic后跟topic的名字,--partitions 2表示创建2个分区,--replication-factor 2表示副本因子为2,就会一共创建2份,1份用来备份
在这里插入图片描述
此时我们再来查看topic,就有信息了
在这里插入图片描述
创建的数据存在logs中的name-1,name是topic名,1是分区号
在这里插入图片描述
kafka2中存了name-0,因为我们创建了2个分区,-0和-1就是两个分区
在这里插入图片描述
kafka3中则存了name-0和name-1,因为我们创建了一份备份,这两个文件就是name-0和name-1的备份

在这里插入图片描述


删除topic

使用delete并指定topic,但是没有将server.properties中的delete.topic.enable设置为true时是不会删掉的
在这里插入图片描述
设置为true时会被删除掉
在这里插入图片描述
创建一个分区为3,副本因子为1的topic
在这里插入图片描述
kafka1/2/3中的logs目录将分别存放name-0,name-1,name-2,所以想要备份的话副本因子最低要设置为2。


查看topic的详细信息
在这里插入图片描述


生产者和消费者测试

创建一个叫sports的topic
在这里插入图片描述
向sports中生产数据

bin/kafka-console-producer.sh --topic sports --broker-list localhost:9092之后出现>光标,输入要传递的消息即可。
在这里插入图片描述
生产结束后,使用另一端读取数据

bin/kafka-console-consumer.sh --topic sports --bootstrap-server localhost:9092 --from-beginning
当生产数据时消费者不在线,登陆时使用from-beginning可以获取到之前生产的数据

在这里插入图片描述


数据和日志分离

server.properties中log.dir虽然叫做log,但实际上是数据的目录,并不是日志的目录,接下来实现将数据和日志存在不同目录下。

首先停止zookeeper和kafka服务,
把zookeeper/data下的除了myid之外的文件都删掉,主要是version-2
再将kafka1/2/3目录下的logs目录里的文件都删掉,然后分别创建一个data空目录,然后分别修改三个kafka目录下的server文件,将数据地址设为对应的data目录
在这里插入图片描述
之后再启动kafka集群
在这里插入图片描述
创建一个topic叫做topic1
在这里插入图片描述
查询logs目录,此时记录的只有日志文件
在这里插入图片描述
而data目录里是数据文件
在这里插入图片描述


发布了92 篇原创文章 · 获赞 426 · 访问量 8万+

猜你喜欢

转载自blog.csdn.net/qq_41112238/article/details/105362610
今日推荐