概述

定义

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目录里是数据文件


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

  1. 【大数据】Hadoop—— 三大核心组件理论入门 | 完全分布式集群搭建 | 入门项目实战

    文章目录 前言 大数据概述 时代背景 4V特点 大数据思维 核心技术 储存 计算 相关技术 云计算 物联网 Hadoop简介 简介 版本之分 项目生态结构 安装和部署 HDFS 简介 集群结构 实现目 ...

  2. Kafka对接采集日志Flum的集群搭建与部署

    目录 Kafka简介 消息队列 Kafka的应用场景 消息队列的两种模型 Kafka中的重要概念 消费者组 幂等性 Kafka集群搭建 kafka集群部署 kafka启动脚本 Kafka命令行操作 1 ...

  3. linux 上elasticsearch集群搭建详解,手把手教学(tar下载包)

    1.安装jdk: 由于es是基于java的,所以先安装jdk: yum install java-1.8.0-openjdk* -y 此命令install结束后不用再去配置环境变量了,直接输入java ...

  4. Kafka消息队列 入门到精通 看这一篇就够了

    文章目录 第一章 概述 1.1 Kafka 的定义及特点 1.2 消息队列的介绍 1.3 Kafka 的基础架构 第二章 入门 2.1 Kafka 的安装部署 2.2 Kafka 命令行操作 第三章 ...

  5. Linux上安装集群版Redis

    [前言] 之前自己在Windows中玩过一段时间Redis(感兴趣的朋友可以看下-Redis系列博客),这次在项目中也有幸能负责起Redis,也由于前两天服务器硬盘损坏导致开发的Redis服务器重新装 ...

  6. kafka基础之介绍和分布式集群搭建

    一 kafka介绍 现在各个电商平台,社交平台等诸多系统可以不断生产出各种细信息,那么我们应该如何收集它,如何分析它,以及输入实时的做到以上需求.Kafka应运而生. Kafka是一个分布式的的流式系 ...

  7. Kafka 详解(二)------集群搭建

    这里通过 VMware ,我们安装了三台虚拟机,用来搭建 kafka集群,虚拟机网络地址如下: hostname                      ipaddress             ...

  8. CentOS7系统上Kubernetes集群搭建

    虚拟机创建 在自己的Mac系统里面利用Parallels Desktop创建3台虚拟机,具体信息如下: CentOS7-Node1: 10.211.55.7 parallels/centos-test ...

  9. linux上elasticsearch集群搭建

    一,准备三台虚拟机 修改主机映射:vi/etc/hosts 192.168.***.*** 主机名 二,es启动时需要使用非root用户,所有创建一个用户 注:(***)为你定义的用户名字 usera ...

最新文章

  1. [转载] Handbook of Constraint Programming——Chapter1 Introduction
  2. (第二篇)Vue计算属性、侦听器、过滤器
  3. 使用Magicodes.IE.Excel完成Excel图片的导入和导出
  4. JAVA入门级教学之(char类型)
  5. 密码猴机器人编程合肥店_CES 2019:边搭积木边学编程 葡萄科技推出编程积木机器人PaiBots...
  6. INITRANS和MAXTRANS参数的作用
  7. linux中rlwrap安装
  8. Umbraco中的Examine Search功能讲解
  9. 从零基础入门Tensorflow2.0 ----三、6. 实战tf.constant
  10. 安装axios太慢解决方案
  11. 智慧园区系统设计方案
  12. 如何使用计算机来线性拟合,Excel2019使用教程:绘制线性回归图
  13. 一文看懂P2P原理及UDP穿透
  14. Python-爬虫抓取视频
  15. 手机存量市场下的激烈角逐:VO荣米格局初定
  16. 与六年测试工程师促膝长谈,他分享的这些让我对软件测试工作有了全新的认知~
  17. java数组交换位置_Java数组元素位置交换?
  18. 动态加载、插件化、热部署、热修复(更新)知识汇总
  19. Importance Weighted Adversarial Nets for Partial Domain Adaptation学习笔记
  20. 【有利可图网】PS技巧:巧用PS制作朦胧古风美女!

热门文章

  1. 【novelai】人工智能绘图初体验
  2. R语言之quantmod包
  3. 计算机自学考证可以考哪些呢?
  4. 【数据库基础】 几种基本的关系代数运算方法
  5. Spring boot + Mybatis Plus实现上一页、下一页功能。
  6. opencv C++ SVM模型训练与分类实现
  7. vue项目中的视频直播插件
  8. 二进制码、格雷码、独热码的区别
  9. shader实现的“地表最强护盾”,没有之一
  10. TBS Studio如何使用