首页 > 其他分享 >Kafka入门教程与详解(一)

Kafka入门教程与详解(一)

时间:2023-11-17 22:00:46浏览次数:42  
标签:订阅 入门教程 Kafka topic 详解 消息 服务器 Message

Kafka入门教程与详解(一)

一、Kafka入门教程

1.1 消息队列(Message Queue)

Message Queue消息传送系统提供传送服务。消息传送依赖于大量支持组件,这些组件负责处理连接服务、消息的路由和传送、持久性、安全性以及日志记录。消息服务器可以使用一个或多个代理实例。

JMS(Java Messaging Service)是Java平台上有关面向消息中间件(MOM)的技术规范,它便于消息系统中的Java应用程序进行消息交换,并且通过提供标准的产生、发送、接收消息的接口简化企业应用的开发,翻译为Java消息服务。

1.2 MQ消息模型

20160421172524740.gif

KafkaMQ消息模型图1-1

1.3 MQ消息队列分类

消息队列分类:点对点和发布/订阅两种:

1、点对点:

消息生产者生产消息发送到queue中,然后消息消费者从queue中取出并且消费消息。

消息被消费以后,queue中不再有存储,所以消息消费者不可能消费到已经被消费的消息。Queue支持存在多个消费者,但是对一个消息而言,只会有一个消费者可以消费。

2、发布/订阅:

消息生产者(发布)将消息发布到topic中,同时有多个消息消费者(订阅)消费该消息。和点对点方式不同,发布到topic的消息会被所有订阅者消费。

1.4 MQ消息队列对比

1、RabbitMQ:支持的协议多,非常重量级消息队列,对路由(Routing),负载均衡(Loadbalance)或者数据持久化都有很好的支持。

2、ZeroMQ:号称最快的消息队列系统,尤其针对大吞吐量的需求场景,擅长的高级/复杂的队列,但是技术也复杂,并且只提供非持久性的队列。

3、ActiveMQ:Apache下的一个子项,类似ZeroMQ,能够以代理人和点对点的技术实现队列。

4、Redis:是一个key-Value的NOSql数据库,但也支持MQ功能,数据量较小,性能优于RabbitMQ,数据超过10K就慢的无法忍受。

1.5 Kafka简介

Kafka是分布式发布-订阅消息系统,它最初由 LinkedIn 公司开发,使用 Scala语言编写,之后成为 Apache 项目的一部分。在Kafka集群中,没有“中心主节点”的概念,集群中所有的服务器都是对等的,因此,可以在不做任何配置的更改的情况下实现服务器的的添加与删除,同样的消息的生产者和消费者也能够做到随意重启和机器的上下线。

20160421172554912.gif

Kafka消息系统生产者和消费者部署关系图1-2

20160421172632084 (2).png

Kafka消息系统架构图1-3

1.6 Kafka术语介绍

1、消息生产者:即:Producer,是消息的产生的源头,负责生成消息并发送到Kafka

服务器上。

2、消息消费者:即:Consumer,是消息的使用方,负责消费Kafka服务器上的消息。

3、主题:即:Topic,由用户定义并配置在Kafka服务器,用于建立生产者和消息者之间的订阅关系:生产者发送消息到指定的Topic下,消息者从这个Topic下消费消息。

4、消息分区:即:Partition,一个Topic下面会分为很多分区,例如:“kafka-test”这个Topic下可以分为6个分区,分别由两台服务器提供,那么通常可以配置为让每台服务器提供3个分区,假如服务器ID分别为0、1,则所有的分区为0-0、0-1、0-2和1-0、1-1、1-2。Topic物理上的分组,一个 topic可以分为多个 partition,每个 partition 是一个有序的队列。partition中的每条消息都会被分配一个有序的 id(offset)。

5、Broker:即Kafka的服务器,用户存储消息,Kafa集群中的一台或多台服务器统称为 broker。

6、消费者分组:Group,用于归组同类消费者,在Kafka中,多个消费者可以共同消息一个Topic下的消息,每个消费者消费其中的部分消息,这些消费者就组成了一个分组,拥有同一个分组名称,通常也被称为消费者集群。

7、Offset:消息存储在Kafka的Broker上,消费者拉取消息数据的过程中需要知道消息在文件中的偏移量,这个偏移量就是所谓的Offset。

1.7 Kafka中Broker

1、Broker:即Kafka的服务器,用户存储消息,Kafa集群中的一台或多台服务器统称为 broker。

2、Message在Broker中通Log追加的方式进行持久化存储。并进行分区(patitions)。

3、为了减少磁盘写入的次数,broker会将消息暂时buffer起来,当消息的个数(或尺寸)达到一定阀值时,再flush到磁盘,这样减少了磁盘IO调用的次数。

4、Broker没有副本机制,一旦broker宕机,该broker的消息将都不可用。Message消息是有多份的。

5、Broker不保存订阅者的状态,由订阅者自己保存。

6、无状态导致消息的删除成为难题(可能删除的消息正在被订阅),kafka采用基于时间的SLA(服务水平保证),消息保存一定时间(通常为7天)后会被删除。

7、消息订阅者可以rewind back到任意位置重新进行消费,当订阅者故障时,可以选择最小的offset(id)进行重新读取消费消息。

1.8 Kafka的Message组成

1、Message消息:是通信的基本单位,每个 producer 可以向一个 topic(主题)发布一些消息。

2、Kafka中的Message是以topic为基本单位组织的,不同的topic之间是相互独立的。每个topic又可以分成几个不同的partition(每个topic有几个partition是在创建topic时指定的),每个partition存储一部分Message。

3、partition中的每条Message包含了以下三个属性:

offset 即:消息唯一标识:对应类型:long

MessageSize 对应类型:int32

data 是message的具体内容。

1.9 Kafka的Partitions分区

1、Kafka基于文件存储.通过分区,可以将日志内容分散到多个server上,来避免文件尺寸达到单机磁盘的上限,每个partiton都会被当前server(kafka实例)保存。

2、可以将一个topic切分多任意多个partitions,来消息保存/消费的效率。

3、越多的partitions意味着可以容纳更多的consumer,有效提升并发消费的能力。

1.10 Kafka的Consumers

1、消息和数据消费者,订阅 topics并处理其发布的消息的过程叫做 consumers。

2、在 kafka中,我们可以认为一个group是一个“订阅者”,一个Topic中的每个partions,只会被一个“订阅者”中的一个consumer消费,不过一个 consumer可以消费多个partitions中的消息(消费者数据小于Partions的数量时)。注意:kafka的设计原理决定,对于一个topic,同一个group中不能有多于partitions个数的consumer同时消费,否则将意味着某些consumer将无法得到消息。

3、一个partition中的消息只会被group中的一个consumer消息。每个group中consumer消息消费互相独立。

本文由博客群发一文多发等运营工具平台 OpenWrite 发布

标签:订阅,入门教程,Kafka,topic,详解,消息,服务器,Message
From: https://blog.51cto.com/u_14725510/8455063

相关文章

  • SQL 查询优化指南:SELECT、SELECT DISTINCT、WHERE 和 ORDER BY 详解
    SELECT关键字SQL的SELECT语句用于从数据库中选择数据。SELECT语句的基本语法如下:SELECTcolumn1,column2,...FROMtable_name;其中,column1,column2,等是您要从表中选择的字段名称,而table_name是您要选择数据的表的名称。如果要选择表中的所有列,您可以使用SELECT*语法。......
  • Oracle expdp参数详解
    数据泵导出实用程序提供了一种用于在Oracle数据库之间传输数据对象的机制。该实用程序可以使用以下命令进行调用:示例:expdpscott/tigerDIRECTORY=dmpdirDUMPFILE=scott.dmp您可以控制导出的运行方式。具体方法是:在'expdp'命令后输入各种参数。要指定各参数,请使用......
  • 【Python入门教程】Python中类的用法和意义
    ​        在Python中,类是一种重要的面向对象编程概念。它们为我们提供了一种方法,可以将现实世界中的对象抽象为代码中的类,并通过类创建对象的实例。类定义了对象的结构和行为,使我们可以构建复杂的程序和数据模型。一、类的定义        在Python中,类的定义使......
  • Unity3D:ECS架构详解
    Unity3D是目前游戏开发领域最为流行的引擎之一,而Unity3DECS架构则是在Unity3D引擎的基础上,针对游戏开发中的实体组件系统进行优化和改进而设计的一种架构。本文将详细介绍Unity3DECS架构的技术细节和代码实现。对惹,这里有一个游戏开发交流小组,希望大家可以点击进来一起交流一下开......
  • Debian关闭防火墙命令详解
    防火墙是保护计算机系统安全的关键组件。在一些情况下,需要关闭防火墙,以允许特定的应用程序或服务访问网络。在Debian系统中关闭防火墙的方法多种多样,本文将从多个方面对Debian关闭防火墙命令进行详细阐述。一、Debian关闭防火墙命令行在Debian系统中,可以通过命令行关闭防火墙。......
  • Kafka 集群如何实现数据同步?
    哈喽大家好,我是咸鱼最近这段时间比较忙,将近一周没更新文章,再不更新我那为数不多的粉丝量就要库库往下掉了T﹏T刚好最近在学Kafka,于是决定写篇跟Kafka相关的文章(文中有不对的地方欢迎大家指出)考虑到有些小伙伴可能是第一次接触Kafka,所以先简单介绍一下什么是Kafka吧!Kafka......
  • Java常见的输入输出流详解
    Java默认使用Unicode字符集来表示字符;Java语言中,中文字符所占的字节数取决于字符的编码方式,采用ISO8859-1编码方式时,一个中文字符与一个英文字符一样只占1个字节;采用GB2312或GBK或Unicode编码方式时,一个中文字符占2个字节;而采用UTF-8编码方式时,一个中文字......
  • AWS上部署容器化应用:EC2和Fargate挂载EFS文件系统的步骤详解
    在云计算领域,AWS(AmazonWebServices)一直是业界领先的云服务提供商之一。在AWS上,我们可以轻松地部署和管理各种应用程序,包括容器化的应用。本篇博文将介绍如何在AWS上创建EFS文件系统,并演示如何在EC2和AWSFargate上挂载这个文件系统。步骤一:创建EFS文件系统首先,登录AWS管理控制台,......
  • app在线实时更新(详解)
    由于Uni-app的代码是针对不同平台(iOS、Android、H5等)进行开发的,因此具体的代码实现会因平台而异。以下是一种可能的实现方式,仅供参考:后端服务器(示例代码使用PythonFlask框架):  fromflaskimportFlask,jsonify importos   app=Flask(__name_......
  • vue2和vue3ref的区别(详解)
    Vue2和Vue3中ref的区别如下:在Vue2中,ref主要用于在模板中获取DOM元素或组件实例。而在Vue3中,虽然ref也可以获取DOM元素或组件实例,但更重要的是,它还可以将一个基本类型的变量转换成响应式的数据,无需再通过复杂的步骤来访问响应式数据。另外,Vue3的ref还支持对象属性和数组索引......