返回顶部
首页 > 资讯 > 操作系统 >Kafka 介绍
  • 362
分享到

Kafka 介绍

kafka分布式java 2023-08-30 11:08:53 362人浏览 薄情痞子
摘要

一、基本概念 1.1 什么是 kafka Kafka 它最初由 LinkedIn 公司开发,之后成为 Apache 项目的一部分。Kafka 是一个分布式消息中间件, 支持分区的、多副本的、多订阅者的、基于 ZooKeeper 协调的分布式

一、基本概念

1.1 什么是 kafka

Kafka 它最初由 LinkedIn 公司开发,之后成为 Apache 项目的一部分。Kafka 是一个分布式消息中间件, 支持分区的、多副本的、多订阅者的、基于 ZooKeeper 协调的分布式消息系统。通俗来说: kafka 就是一个存储系统,存储的数据形式为 “消息";它的主要作用类似于蓄水池,起到一个缓冲作用;

1.1.1 消息队列介绍

请添加图片描述

常见的消息队列有 activeMQRabbitMQRocketMQ;消息队列常用于 两个系统之间的 数据传递;分布式消息传递基于可靠的消息队列,在客户端应用和消息系统之间异步传递消息。有两种主要的 消息传递模式: 点对点传递模式、发布- 订阅模式。大部分的消息系统选用发布-订阅模式。kafka 是发布-订阅模式。

1.1.2 为什么使用消息队列

1)、提高扩展性:因为消息队列解耦了处理过程,有新增需求时只要另外增加处理过程即可。

2)、提高峰值处理能力:在访问量剧增的情况下,应用仍然需要继续发挥作用。使用消息队列能够使关键组件顶住突发的访问压力,而不会因为突发的超负荷请求而完全崩溃;

3)、提高系统的可恢复性:消息队列降低了进程间的耦合度,所以即使一个处理消息的进程挂掉,加入队列中的消息仍然可以在系统回复后被处理

1.2 kafka 的特点

1)、高吞吐量、低延迟:kafka 每秒可以处理几十万条消息,它的延迟最低只有几毫秒

2)、可扩展性:kafka 集群支持热扩展

3)、持久性、可靠性:消息被持久化到本地磁盘,并且 支持数据备份防止数据丢失

4)、容错性: 允许集群中节点失败(若副本数量为n,则允许n-1 个节点失败)

5)、高并发:支持数千个客户端同时读写

1.3 kafka 的使用场景

1)、主要用于数据处理系统中的缓冲!(尤其是实时流式数据处理)

2)、日志收集:可以用 kafka 可以收集各种服务的 log,通过 kafka 以统一接口服务的方式开放给各种 consumer,例如 hadoopHBase、Solr 等。

3)、消息系统:解耦和生产者和消费者、缓存消息等。

4)、用户活动跟踪:kafka 经常被用来记录 WEB 用户或者 app 用户的各种活动

5)、来做实时的监控分析,或者装载到 hadoop、数据仓库中做离线分析和挖掘。

6)、运营指标:kafka经常用来记录运维监控数据。包括收集各种分布式应用的数据,各种操作的集中反馈,比如报警和报告。

7)、流式数据处理:比如 spark streaming 和 flink

二、kafka 系统的架构

在这里插入图片描述

Kafka 架构分为以下几个部分

2.1 producer

消息生产者,就是向 kafkabroker 发消息的客户端。

2.2 consumer

consumer :消息消费者,从 kafka broker 取消息的客户端。

consumer group:单个或多个 consumer 可以组成一个 consumer group;这是 kafka 用来实现消息的广播(发给所有的 consumer)和单播(发给任意一个 consumer)的手段。一个 topic 可以有多个 Consumer Group。

2.3 Topic

2.3.1 数据的逻辑分类

可以理解为数据库中“表"的概念;

2.3.2 Partition

1)、topic 中数据的具体管理单元;

2)、一个 topic 可以划分为多个partition,分布到多个 broker 上管理;每个 partition 由一个kafka broker 服务器管理;

3)、partition 中的每条消息都会被分配一个递增的 id(offset);

4)、每个 partition 是一个有序的队列,kafka 只保证按一个 partition 中的消息的顺序,不保证一个 topic的整体(多个 partition 间)的顺序。每个 partition 都可以有多个副本;

2.3.3 Broker

1)、一台 kafka 服务器就是一个 broker。

2)、一个 kafka 集群由多个 broker 组成。

3)、一个 broker 可以容纳多个 topic 的多个 partition。

4)、分区对于 kafka 集群的好处是:实现 topic 数据的负载均衡。分区对于消费者来说,可以提高并发度,提高效率。

2.3.4 offset

消息在底层存储中的索引位置,kafka 底层的存储文件就是以文件中第一条消息的 offset 来命名的,通过 offset 可以快速定位到消息的具体存储位置;

2.4 Leader

partition replica 中的一个角色,producer 和 consumer 只跟 leader 交互( 负责读写)。

2.5 Replica

partition 的副本,保障 partition 的高可用(replica 副本数目不能大于 kafka broker 节点的数目,否则报错。每个 partition 的所有副本中,必包括一个 leader 副本,其他的就是 follower 副本。

2.6 Follower

partition replica 中的一个角色,从leader 中拉取复制数据( 只负责备份)。

如果 leader 所在节点宕机,follower 中会选举出新的 leader;

2.7 Offset

每一条数据都有一个 offset,是数据在该 partition 中的唯一标识(其实就是消息的索引号)。各个 consumer 会保存其消费到的 offset位置,这样下次可以从该 offset 位置开始继续消费;consumer 的消费 offset 保存在一个专门的 topic(__consumer_offsets)中;

2.8 Message

在客户端编程代码中,消息的类叫做 ProducerRecord; ConsumerRecord;

简单来说,kafka 中的每个massage 由一对 key-value 构成

Kafka 中的 message格式经历了 3个版本的变化了:version0 、 version1 、 version2

各个字段的含义介绍如下:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-70v83A5V-1664157496199)(img/wps2.jpg)]

1)、crc:占用 4 个字节,主要用于校验消息的内容;

2)、magic:这个占用 1 个字节,主要用于标识 Kafka 版本。Kafka 0.10.x magic 默认值为 1

3)、attributes:占用 1 个字节,这里面存储了消息压缩使用的编码以及 Timestamp 类型。目前 Kafka 支持 gzip、snappy 以及 lz4(0.8.2 引入) 三种压缩格式;后四位如果是 0001 则表示 gzip 压缩,如果是 0010 则是snappy 压缩,如果是 0011 则是 lz4 压缩,如果是 0000 则表示没有使用压缩。第 4个 bit 位如果为 0,代表使用 create time;如果为 1 代表 append time;其余位(第 5~8 位)保留;

4)、key length:占用 4 个字节。主要标识 Key 的内容的长度;

5)、key:占用 N 个字节,存储的是 key 的具体内容;

6)、value length:占用 4 个字节。主要标识 value 的内容的长度;

7)、value:value 即是消息的真实内容,在 Kafka 中这个也叫做 payload。

三、kafka 的数据存储结构

3.1 kafka 的整体存储结构

在这里插入图片描述

3.2 服务器存储结构示例

1)、由于生产者生产的消息会不断追加到 log 文件末尾,为防止 log 文件过大导致数据定位效率低下,

2)、Kafka 采取了分片和索引机制,将每个 partition 分为多个 segment。每个 segment 对应两个文件:“.index"文件和“.log"文件。这些文件位于一个文件夹下,该文件夹的命名规则为:topic 名称-分区序号。index 和log 文件以当前 segment 的第一条消息的offset 命名。“.index"文件存储大量的索引信息,“.log"文件存储大量的数据,索引文件中的元数据指向对应数据文件中 message的物理偏移地址。

件位于一个文件夹下,该文件夹的命名规则为:topic 名称-分区序号。index 和log 文件以当前 segment 的第一条消息的offset 命名。“.index"文件存储大量的索引信息,“.log"文件存储大量的数据,索引文件中的元数据指向对应数据文件中 message的物理偏移地址。

3)、Kafka 中的索引文件以稀疏索引( sparse index )的方式构造消息的索引,它并不保证每个消息在索引文件中都有对应的索引;每当写入一定量(由broker 端参数 log.index.interval.bytes 指定,默认值为 4096 ,即 4KB )的消息时,偏移量索引文件和时间戳索引文件分别增加一个偏移量索引项和时间戳索引项,增大或减小 log.index.interval.bytes 的值,对应地可以增加或缩小索引项的密度;偏移量索引文件中的偏移量是单调递增的,查询指定偏移量时,使用二分查找法来快速定位偏移量的位置。

来源地址:https://blog.csdn.net/qq_39680564/article/details/127048219

--结束END--

本文标题: Kafka 介绍

本文链接: https://www.lsjlt.com/news/382792.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Kafka 介绍
    一、基本概念 1.1 什么是 kafka Kafka 它最初由 LinkedIn 公司开发,之后成为 Apache 项目的一部分。Kafka 是一个分布式消息中间件, 支持分区的、多副本的、多订阅者的、基于 zookeeper 协调的分布式...
    99+
    2023-08-30
    kafka 分布式 java
  • kafka介绍与搭建(单机版)
    1.1 主要功能根据官网的介绍,ApacheKafka®是一个分布式流媒体平台,它主要有3种功能:  1:It lets you publish and subscribe to streams of records.发布和订阅消息流,这个...
    99+
    2023-01-31
    单机版 kafka
  • 大数据Kafka:消息队列和Kafka基本介绍
    目录一、什么是消息队列二、消息队列的应用场景异步处理 应用耦合限流削峰消息驱动系统 三、消息队列的两种方式点对点模式发布/订阅模式四、常见的消息队列的产品1) RabbitMQ2) ...
    99+
    2024-04-02
  • 【项目实战】Kafka中Topic创建介绍
    一、Kafka介绍 Kafka是一种分布式流处理平台,它可以处理实时数据流,支持高吞吐量、低延迟的数据处理。 它通过Topic和Partition机制将消息存储在集群中,并支持高吞吐量的消息发布和订阅...
    99+
    2023-10-21
    kafka java 分布式
  • Python~~简介介绍
    Python (英国发音:/paθn/ 美国发音:/paθɑn/), 是一种面向对象的解释型计算机程序设计语言,由荷兰人Guido van Rossum于1989年发明,第一个公开发行版发行于...
    99+
    2024-04-02
  • LAMP架构介绍、MYSQL介绍、安装
    LAMP 架构 LAMP 指的Linux(操作系统)、Apache(httpd服务器)、MySQL(数据库软件)和PHP(有时也是指Per或Python)的缩写,一般用来建立web服务器(三个角色可以在一...
    99+
    2024-04-02
  • Hadoop介绍
    Hadoop是Apache旗下的一个用java语言实现开源软件框架,是一个开发和运行处理大规模数据的软件平台,允许使用简单的编程模型在大量的计算机集群上对大型数据集进行分布式处理。 下面是Hadoop的版本: HDFS(分布式文...
    99+
    2014-08-16
    Hadoop介绍
  • redis介绍
    Ø开源的(BSD协议),使用ANSI  C 编写,基于内存的且支持持久化,高性能的Key-Value的NoSQL数据库 Ø支持数据结构类型丰富,有如 字符串(strings), 散列(hashes), 列表(lists),...
    99+
    2015-04-14
    redis介绍
  • MySQL介绍
    什么是数据库? 作用:存储数据的,能够长期(断电,关机)保持数据。 数据存储在哪里:硬盘和内存 我们平时说的数据库:数据库管理系统(软件)(DataBase Manager System: DBS) 数据库软件(电脑的excel文件)中可以...
    99+
    2017-06-20
    MySQL介绍 数据库入门 数据库基础教程
  • infinispan~介绍
    国内的infinispan的文章不多,所以基本都是从google和官方api上找的资料,对一些问题的调研确实花了一些经历,但最终还是解决了问题,心情也是更加愉悦! 介绍 infinispan是分布式的缓存框架,可以直接嵌入到jboss(W...
    99+
    2018-06-06
    infinispan~介绍
  • DBUtils介绍
      一、DBUtils介绍 apache  什么是DBUtils,它的作用  DBUtils是Java编程中的数据库操作实用工具,小巧简单实用。  DBUtils封装了对JDBC的操作,简化了JDBC操作,...
    99+
    2024-04-02
  • Greenplum 介绍
    数据库分两种类型:1、OLTP:重吞吐和高并发;前台应用,面向客户。主要特点:a、单次处理的数据量很小b、对响应时间要求很高c、用户数量庞大2、OLAP:重计算,Greenplum属于OLAP;后台数据,面...
    99+
    2024-04-02
  • MongoDB 介绍
    MongoDB 由C++编写,是一个基于分布式文件存储的开源数据库系统,属于NoSQL在高负载情况下,可以添加更多的节点,可以保证服务器性能MongoDB旨在为WEB应用提供可扩展的高性能数据存储方案Mon...
    99+
    2024-04-02
  • EIGRP介绍
    08     IGRP和OSPF8.1   EIGRP介绍8.1.1     ...
    99+
    2024-04-02
  • ANYDATA介绍
    ANYDATA特殊列,属于Oracle内建列,对于Oracle数据库,每一个值都是一种数据类型。当用户创建表或聚簇时,需要为每一个列指定对应的数据类型。即使是创建存储过程或函数的时,一样需要为参数指定相应的...
    99+
    2024-04-02
  • 介绍PHP
    PHP是一种流行的服务器端编程语言,用于开发Web应用程序。它是一种开源的编程语言,具有易学易用的语法和强大的功能。PHP支持在服务器上运行的动态网页和Web应用程序的快速开发。 PHP可以与HTM...
    99+
    2023-09-14
    php 开发语言 PHP phpstorm 学习 学习工具
  • SpringMvc介绍。
    目录 1、SpringMvc概述 1、基本介绍 2、工作流程  3、bean加载控制  二、请求 1、请求映射路径 2、请求方式 3、请求参数 4、请求参数(传递json数据) 5、日期类型参数传递 三、响应 四、REST风格 1、REST...
    99+
    2023-09-01
    java SpringMVC
  • python介绍
    python是一门优秀的综合语言,python的宗旨是简明,优雅,强大,在人工智能,云计算,金融分析,大数据开发,web开发,自动化运维,测试等方向应用广泛,已是全球第4大最流行的语言目前python主要应用领域:  web开发-...
    99+
    2023-01-30
    python
  • springCloud介绍
    springCloud介绍SOA:更注重于相同功能的重用,来构建一条企业功能的主线,其他的功能在这条主线上进行开发和扩展。有点类似于EJB的功能。微服务:将整个功能拆分成若干个服务,各个服务独立部署,此时的重点是业务拆分的粒度。 ...
    99+
    2023-06-02
  • OAuth2.0介绍
    概述OAuth 2.0 授权框架能够是第三方应用获取应用被保护的服务资源,它是一种授权互联网标准,由IETF(Internet Engineering Task Force)管理发布。本文主要参考材料为 RFC 6749 初步理解接下来以一...
    99+
    2023-06-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作