现在从事java开发的同学,不论是在面试过程中还是在日常的工作中,肯定会碰到消息队列的情况,市面上消息队列有很多:kafka、rocketMQ、rabbitMQ、zeroMQ等,从本篇博客起计划分享一些kafka方面的知识。

消息队列基础知识

所谓消息队列很好理解,把它拆开来看就是消息和队列,消息这里不是一般意义上的消息,这里是广义的,你可以理解为一个个的订单信息、学生信息、一个个的短信等;队列就很好理解了,学过计算机的人都知道就是一个先进先出的线性数据结构。好了,理解了消息队列下面看下消息队列的其他内容。

一个消息队列应该包含三部分,分别是生成方、消息队列、消费方,

推/拉模型

何为推/拉模型,这是对于消费方来说的,上面的图细心的读者会发现在“消息队列”和“消费方”之间我用的是不带箭头的实线。消息队列把消息推给消费方称为推模型,消费方主动去消息队列拉取消息称为拉模型。

推/拉模型的优缺点,推模型的话就是无法考虑到消费方的消费能力,有可能消费方消费不过来,造成消息丢失;拉模型消费方主动拉取消息,可以控制消费的速度,但是要主要消息队列中消息的积压问题。

点对点/发布订阅模式

这里说的是生成方和消费方的关系,点对点即一个生成方有一个消费方,所有的消息均有该消费方自己消费;发布订阅讲的是一个生成方有多个消费方,每个订阅了该消息队列的消费方都可以消费到生成方的全部消息。

      

使用消息队列的优点

在系统中引入消息队列的好处有很多,总的来说有下面三点

  • 异步,这里把生产方和消费方看成是两个系统,两个系统间存在调用关系,加入消息队列后,之前的同步调用关系变成了异步调用,可以减少系统的等待时间;
  • 削峰,在高并发、大流量系统中,可以把要处理的消息放到队列中,慢慢去消费,不至于把系统打死;
  • 解耦,把对消息的业务处理放在同一个系统中,会造成系统的庞大,增加维护难度,引入消息队列,拆成多个系统可以做到系统间的解耦;

使用消息队列的缺点

上面说了那么多优点,消息队列就没有缺点了吗

  • 增加系统复杂度,由于引入了消息队列,必然造成系统间调用的复杂;服务调用链增长;排查问题难度加大;
  • 增加维护成本,消息队列使系统解耦的同时,带来了维护的成本,要维护多个项目,而且要熟悉服务间的调用关系;

上面对消息队列大体有了一个了解,下面看kafka.

kafka初始

引用官网上的一句话,kafka是一个分布式流处理平台。说到分布式,自然想到分布式系统中的CAP理论,以及副本等概念,这里仅仅提下这些概念。对于kafka的简介,这里看官网未免不是更好的选择,

作为一款消息队列,kafka使用发布订阅模式,采取拉模型消费消息。

kafka概念

对kafka有了一定的了解后,看下其中的一些概念

broker

kafka是一个分布式的系统意味着是多节点的,在这个系统中的每个节点就称为一个broker。

leader

上面说到每个节点都是一个broker,在分布式系统中必须要有一个主节点,来处理和管理其他节点,那么由zookeeper从多个broker中选举出来的主节点称为leader

follower

除了leader之外的broker称为follower

topic

topic叫做数据主题相当于生产方发送消息的目的地,消费方消费消息的数据源。消息通过topic进行存储。

分区(partition)

分区是最终存放消息地方,分区属于topic,一个topic可以有多个分区。一个消息进入到topic后,由topic决定消息存放在哪个分区,一般是通过轮询的方式决定消息的存放分区,在一个分区内消息是有序的。消息落到分区后会有分配一个唯一消息id,此id称为offset。

副本(replication)

分布式系统为了保证系统的可用性,往往要把保存的数据存多个副本,也就是同样的数据存多份。

消费者群组

一个topic可以有多个消费者,那么所有的消费者可以接受到topic中的全部消息,为了提高消费者的处理能力,在消费者中使用多线程共同消费消息不是更好,消费者群组就是这样一个概念,多个消费者组成一个群组共同去消费topic。消费者群组中的消费线程(或者服务)根据分区去消费消息。

offset

offset翻译过来叫偏移量,在消费端会记录当前这个时刻消费的消息id,这个id就是offset。在消费过程中重置该offset,可以消费之前的消息(重复消费)或者跳过某些消息从最新的开始消费。

kafka架构

kafka是分布式集群架构,使用zookeeper作为管理组件,协调集群中每个节点的关系,也就是选举leader,管理topic和partition。

简单介绍了消息队列和kafka的基本概念,下面准备开始kafka的安装及使用,敬请关注。

推荐一个kafka的中文网站:https://kafka.apachecn.org/

kafka之一:kafka简介的更多相关文章

  1. Kafka记录-Kafka简介与单机部署测试

    1.Kafka简介 kafka-分布式发布-订阅消息系统,开发语言-Scala,协议-仿AMQP,不支持事务,支持集群,支持负载均衡,支持zk动态扩容 2.Kafka的架构组件 1.话题(Topic) ...

  2. [转帖]kafka入门:简介、使用场景、设计原理、主要配置及集群搭建

    kafka入门:简介.使用场景.设计原理.主要配置及集群搭建 http://www.aboutyun.com/thread-9341-1-1.html 还没看完 感觉挺好的. 问题导读: 1.zook ...

  3. Kafka 探险 - 架构简介

    Kafka 探险 - 架构简介 这个 Kafka 的专题,我会从系统整体架构,设计到代码落地.和大家一起杠源码,学技巧,涨知识.希望大家持续关注一起见证成长! 我相信:技术的道路,十年如一日!十年磨一 ...

  4. CentOS 7部署Kafka和Kafka集群

    CentOS 7部署Kafka和Kafka集群 注意事项 需要启动多个shell脚本交互客户端进行验证,运行中的客户端不要停止. 准备工作: 安装java并设置java环境变量,在`/etc/prof ...

  5. Kafka(3)--kafka消息的存储及Partition副本原理

    消息的存储原理: 消息的文件存储机制: 前面我们知道了一个 topic 的多个 partition 在物理磁盘上的保存路径,那么我们再来分析日志的存储方式.通过 [root@localhost ~]# ...

  6. Apache Kafka安全| Kafka的需求和组成部分

    1.目标 - 卡夫卡安全 今天,在这个Kafka教程中,我们将看到Apache Kafka Security 的概念  .Kafka Security教程包括我们需要安全性的原因,详细介绍加密.有了这 ...

  7. kafka - Confluent.Kafka

    上个章节我们讲了kafka的环境安装(这里),现在主要来了解下Kafka使用,基于.net实现kafka的消息队列应用,本文用的是Confluent.Kafka,版本0.11.6 1.安装: 在NuG ...

  8. kafka实战教程(python操作kafka),kafka配置文件详解

    kafka实战教程(python操作kafka),kafka配置文件详解 应用往Kafka写数据的原因有很多:用户行为分析.日志存储.异步通信等.多样化的使用场景带来了多样化的需求:消息是否能丢失?是 ...

  9. kafka入门:简介、使用场景、设计原理、主要配置及集群搭建(转)

    问题导读: 1.zookeeper在kafka的作用是什么? 2.kafka中几乎不允许对消息进行"随机读写"的原因是什么? 3.kafka集群consumer和producer状 ...

  10. Kafka官方文档翻译——简介

    简介 Kafka擅长于做什么? 它被用于两大类应用: 在应用间构建实时的数据流通道 构建传输或处理数据流的实时流式应用 几个概念: Kafka以集群模式运行在1或多台服务器上 Kafka以topics ...

随机推荐

  1. 2.7w字!Java基础面试题/知识点总结!(2021 最新版)

    这篇<Java 基础知识总结>是 JavaGuide 上阅读量最高的一篇文章,由于我对其进行了重构完善并且修复了很多小问题,所以,在博客园再同步一下! 文章内容比较多,目录如下: 基础概念 ...

  2. SpringMVC笔记(五)

    1. 拦截器 1.1 拦截器和过滤器 SpringMVC的处理器拦截器类似于Servlet开发过程中的过滤器Filter,用于对处理器进行预处理和后处理.我们可以自定义一些拦截器来实现特定的功能 过滤 ...

  3. 各种平衡树收集(收集控(‐^▽^‐))\平衡树模板题的各种花式做法QAQ

    非旋转treap!!!(FHQ Treap) 递归版Splay(无需维护父指针) Scapegoat _ Tree--替罪羊树(一只(棵)特立独行的猪(树)) 宗法树(平衡线段树\finger_tre ...

  4. junit+maven单元测试

    一.概念 junit是一个专门测试的框架 集合maven进行单元测试,可批量测试类中的大量方法是否符合预期 二.作用:单元测试:测试的内容是类中的方法,每一个方法都是独立测试的.方法是测试的基本单位. ...

  5. hdu2363 枚举最短路

    (1) 二分     把所有的高度都拿过来,组合起来,sort一遍,然后二分,找到能连通的最小的那个,但这里存在一起情况,就是遇到高度差相等的时候会bug.... (2) 枚举 连通直接break   ...

  6. Java并发工具篇

    theme: juejin highlight: an-old-hope 作者:汤圆 个人博客:javalover.cc 前言 随着天气的逐渐变热,整个人也开始浮躁不安 当然这里说的不是我,因为我是一 ...

  7. Pytorch系列:(五)CNN

    卷积 Conv2d 2D卷积函数和参数如下 nn.Conv2d( in_channels, out_channels, kernel_size, stride=1, padding=0, dilati ...

  8. Logstash 的命令行入门 ( 附上相关实验步骤 )

    Logstash 的命令行入门 ( 附上相关实验步骤 ) 在之前的博客中,我们已经在 Macbook Big Sur 环境下安装了 ELK 的相关软件,并且已经可以成功运行对应的模块: 如果没有安装的 ...

  9. Go - 开箱即用,WEB 界面一键安装,没有项目经验,可以拿这个练手

    安装界面 启动程序之后,会在浏览器中自动打开安装界面. 因为程序会使用到 Redis 和 MySQL,所以安装前请输入 Redis.MySQL 配置信息,点击初始化按钮,会将用到的数据表和默认数据进行 ...

  10. MSSQL·最长输出长度限制之解决方案

    阅文时长 | 0.11分钟 字数统计 | 234.4字符 主要内容 | 1.引言&背景 2.声明与参考资料 原文『MSSQL·最长输出长度限制之解决方案』 编写人 | SCscHero 编写时 ...