Kafka基本概念与应用场景

article/2025/10/7 22:20:06

一、Kafka的定义

Apache Kafka是一种分布式的、基于发布/订阅的消息系统,由Scala语言编写而成。它具备快速、可扩展、可持久化的特点。Kafka最初由LinkedIn开发,并于2011年初开源, 2012年10月从Apache孵化器毕业,成为Apache基金会的顶级项目。目前,越来越多的开源分布式处理系统支持与Kafka集成,例如:Apache Storm、Spark。也有越来越多的公司在Kafka的基础上建立了近乎实时的信息处理平台,例如:LinkedIn、Netflix、Uber和Verizon。在国内也有很多互联网公司在生产环境中使用Kafka作为其消息中间件。

二,Kafka的应用场景

1,消息系统:

Kafka支持Topic广播类型的消息,具备高可靠性和容错机制。同时Kafka也可以保证消息的顺序性和可追溯性。传统的消息系统很难实现这些消息系统的特性。同时,Kafka可以将消息持久化保存到磁盘,从而有效地减少数据丢失的风险。从这个角度看,Kafka也可以看成是一个数据存储系统。

2,大数据流式计算处理:

在大数据计算领域中,计算主要分为大数据离线计算和大数据流式计算。可以将流式数据进行实时采集然后缓存到Kafka中,从而进一步通过Storm、SparkStreaming和Flink DataStream进行数据的实时计算。

3,系统的解耦:

由于Kafka支持异步的消息机制,可以将Kafka用于系统的解耦设计。这样,一个系统的架构变动,就不会影响另一个系统的运行。

4,持久性日志

Kafka可以为外部系统提供一种持久性日志的分布式系统。日志可以在多个节点间进行备份,Kafka为故障节点数据恢复提供了一种重新同步的机制。同时,Kafka很方便与HDFS和Flume进行整合,这样就方便将Kafka采集的数据持久化到其他外部系统。

5,网站用户行为追踪

为了更好地了解用户行为、操作习惯,改善用户体验,进而对产品升级改进,将用户操作轨迹、内容等信息发送到Kafka集群上,通过Hadoop、Spark或Strom等进行数据分析处理,生成相应的统计报告,为推荐系统推荐对象建模提供数据源,进而为每个用户进行个性化推荐。

三、Kafka的架构

在这里插入图片描述

1,Producers(生产者)

生产者将数据推送给经纪人。 当新代理启动时,所有生产者搜索它并自动向该新代理发送消息。 Kafka生产者不等待来自代理的确认,并且发送消息的速度与代理可以处理的一样快。

2,Consumers(消费者)

因为Kafka代理是无状态的,这意味着消费者必须通过使用分区偏移来维护已经消耗了多少消息。 如果消费者确认特定的消息偏移,则意味着消费者已经消费了所有先前的消息。 消费者向代理发出异步拉取请求,以具有准备好消耗的字节缓冲区。 消费者可以简单地通过提供偏移值来快退或跳到分区中的任何点。 消费者偏移值由ZooKeeper通知。

3,Broker(代理)

Kafka集群通常由多个代理组成以保持负载平衡。 Kafka代理是无状态的,所以他们使用ZooKeeper来维护它们的集群状态。 一个Kafka代理实例可以每秒处理数十万次读取和写入,每个Broker可以处理TB的消息,而没有性能影响。 Kafka经纪人领导选举可以由ZooKeeper完成。

4,ZooKeeper

ZooKeeper用于管理和协调Kafka代理。 ZooKeeper服务主要用于通知生产者和消费者Kafka系统中存在任何新代理或Kafka系统中代理失败。 根据Zookeeper接收到关于代理的存在或失败的通知,然后生产者和消费者采取决定并开始与某些其他代理协调他们的任务。

四、Kafka的特性

1,消息持久化

Kafka高度依赖于文件系统来存储和缓存消息。说到文件系统,大家普遍认为磁盘读写慢,依赖于文件系统进行存储和缓存消息势必在性能上会大打折扣,其实文件系统存储速度快慢一定程度上也取决于我们对磁盘的用法。据Kafka官方网站介绍:6块7200r/min SATA RAID-5阵列的磁盘线性写的速度为600 MB/s,而随机写的速度为100KB/s,线性写的速度约是随机写的6000多倍。由此看来磁盘的快慢取决于我们是如何去应用磁盘。加之现代的操作系统提供了预读(read-ahead)和延迟写(write-behind)技术,使得磁盘的写速度并不是大家想象的那么慢。同时,由于Kafka是基于JVM(Java Virtual Machine)的,而Java对象内存消耗非常高,且随着Java对象的增加JVM的垃圾回收也越来越频繁和繁琐,这些都加大了内存的消耗。鉴于以上因素,使用文件系统和依赖于页缓存(page cache)的存储比维护一个内存的存储或是应用其他结构来存储消息更有优势,因此Kafka选择以文件系统来存储数据。
消息系统数据持久化一般采用为每个消费者队列提供一个 B 树或其他通用的随机访问数据结构来维护消息的元数据,B树操作的时间复杂度为O(logn
),O(logn
)的时间复杂度可以看成是一个常量时间,而且B树可以支持各种各样的事务性和非事务性语义消息的传递。尽管B树具有这些优点,但这并不适合磁盘操作。目前的磁盘寻道时间一般在10ms以内,对一块磁盘来说,在同一时刻只能有一个磁头来读写磁盘,这样在并发IO能力上就有问题。同时,对树结构性能的观察结果表明:其性能会随着数据的增长而线性下降。鉴于消息系统本身的作用考虑,数据的持久化队列可以建立在简单地对文件进行追加的实现方案上。因为是顺序追加,所以Kafka在设计上是采用时间复杂度O(1)的磁盘结构,它提供了常量时间的性能,即使是存储海量的信息(TB级)也如此,性能和数据的大小关系也不大,同时Kafka将数据持久化到磁盘上,这样只要磁盘空间足够大数据就可以一直追加,而不会像一般的消息系统在消息被消费后就删除掉,Kafka提供了相关配置让用户自己决定消息要保存多久,这样为消费者提供了更灵活的处理方式,因此Kafka能够在没有性能损失的情况下提供一般消息系统不具备的特性。
正是由于Kafka将消息进行持久化,使得Kafka在机器重启后,已存储的消息可继续恢复使用。同时Kafka能够很好地支持在线或离线处理、与其他存储及流处理框架的集成。

2,高吞吐量

高吞吐量是Kafka设计的主要目标,Kafka将数据写到磁盘,充分利用磁盘的顺序读写。同时,Kafka在数据写入及数据同步采用了零拷贝(zero-copy)技术,采用sendFile()函数调用,sendFile()函数是在两个文件描述符之间直接传递数据,完全在内核中操作,从而避免了内核缓冲区与用户缓冲区之间数据的拷贝,操作效率极高。Kafka还支持数据压缩及批量发送,同时Kafka将每个主题划分为多个分区,这一系列的优化及实现方法使得Kafka具有很高的吞吐量。经大多数公司对Kafka应用的验证,Kafka支持每秒数百万级别的消息。

3,扩展性

Kafka要支持对大规模数据的处理,就必须能够对集群进行扩展,分布式必须是其特性之一,这样就可以将多台廉价的PC服务器搭建成一个大规模的消息系统。Kafka依赖ZooKeeper来对集群进行协调管理,这样使得Kafka更加容易进行水平扩展,生产者、消费者和代理都为分布式,可配置多个。同时在机器扩展时无需将整个集群停机,集群能够自动感知,重新进行负责均衡及数据复制。

4, 多客户端支持

Kafka核心模块用Scala语言开发,但Kafka支持不同语言开发生产者和消费者客户端应用程序。0.8.2之后的版本增加了Java版本的客户端实现,0.10之后的版本已废弃Scala语言实现的Producer及Consumer,默认使用Java版本的客户端。Kafka提供了多种开发语言的接入,如Java、Scala、C、C++、Python、Go、Erlang、Ruby、Node.js等,感兴趣的读者可以自行参考https://cwiki.apache.org/confluence/display/KAFKA/Clients。同时,Kafka支持多种连接器(Connector)的接入,也提供了Connector API供开发者调用。Kafka与当前主流的大数据框架都能很好地集成,如Flume、Hadoop、HBase、Hive、Spark、Storm等。

5,安全机制

当前版本的Kafka支持以下几种安全措施:
通过SSL和SASL(Kerberos),SASL/PLAIN验证机制支持生产者、消费者与代理连接时的身份认证;
支持代理与ZooKeeper连接身份验证;
通信时数据加密;
客户端读、写权限认证;
Kafka支持与外部其他认证授权服务的集成。

6, 数据备份

Kafka可以为每个主题指定副本数,对数据进行持久化备份,这可以一定程度上防止数据丢失,提高可用性。

7,轻量级

Kafka的代理是无状态的,即代理不记录消息是否被消费,消费偏移量的管理交由消费者自己或组协调器来维护。同时集群本身几乎不需要生产者和消费者的状态信息,这就使得Kafka非常轻量级,同时生产者和消费者客户端实现也非常轻量级。

8,消息压缩

Kafka支持Gzip、Snappy、LZ4这3种压缩方式,通常把多条消息放在一起组成MessageSet,然后再把MessageSet放到一条消息里面去,从而提高压缩比率进而提高吞吐量。


http://chatgpt.dhexx.cn/article/dw9CheCp.shtml

相关文章

kafka使用场景与设计原理

目录 1 kafka的介绍 2 架构 2.1 工作流程 2.2 副本原理 2.3 分区和主题的关系 2.4 生产者 2.4.1 为什么分区-可以水平扩展 2.4.2 分区策略 2.5 消费者 2.5.1 消费方式 2.5.2 分区分配策略 2.6 数据可靠性保证 2.6.1 副本数据同步策略 2.6.2 ACK 应答机制 2.6.3 …

kafka学习(六):kafka应用场景

消息队列中间件是分布式系统中重要的组件,主要解决应用解耦,异步消息,流量削锋等问题,实现高性能,高可用,可伸缩和最终一致性架构。目前使用较多的消息队列有ActiveMQ,RabbitMQ,Zero…

kafka使用场景

kafka基本介绍 kafka是使用scala语言和java语言编写的一套高可用的消息队列,广泛应用在后端开发里,是后端开发里的一个重要中间件。 kafka的使用场景 1、异步处理 下图为一个订单状态在后端各个模块之间的处理流程,后一个流程必须要等到前…

kafka的应用场景

关于消息队列的使用 一、消息队列概述消息队列中间件是分布式系统中重要的组件,主要解决应用解耦,异步消息,流量削锋等问题,实现高性能,高可用,可伸缩和最终一致性架构。目前使用较多的消息队列有ActiveMQ…

解开Kafka神秘的面纱(一):kafka架构与应用场景

文章目录 一、前言二、Kafka简介2.1 Kafka简介2.2 基于分布式的Kafka 三、Kafka架构3.1 消息生产与消费3.1.1 消息生产与消费模型3.1.2 Kafka消费单元是消费者组3.1.3 Kafka只消费Partition主分区的消息3.1.4 消费者组中的每个消费者的offset3.1.5 小结 3.2 Partition备份与选主…

Metricbeat使用与入门-1 收集系统指标数据到ES中

Metricbeat由模块和指标集组成。Metricbeat 模块定义了从特定服务(例如Redis,MySQL等)收集数据的基本逻辑。 系统环境:CentOS 7.4 ES版本:7.6.1 Metricbeat版本:7.6.1 1 安装 Metricbeat版本:7…

Beats:Beats 入门教程 (二)

这篇文章是 “Beats 入门教程 (一)”的续篇。在上一篇文章,我们主要讲述了 Beats 的一些理论方面的知识。在这篇文章中,我们将具体展示如何使用 Filebeat 及 Metriceat 把数据导入到我们的 Elasticsearch 并对他们进行分析。 安装…

MetricBeat + Elasticsearch + Kibana 实现监控指标可视化

1、Elasticsearch 监控指标可视化概述 之前的推文 Elasticsearch 磁盘使用率超过警戒水位线,怎么办?有读者留言:“配合监控系统”。 是的,监控系统就像我们的车载监控,平时可能用不到,一用到的时候就是“大…

关于 Kubernetes中集群统一日志管理方案(Elasticsearch+Filebeat+Kibana+Metricbeat)搭建的一些笔记

写在前面 学习K8s,所以整理分享给小伙伴这里要说明的是:这一套方案太吃硬件了,需要高配的本才能跑起来我的16G运存,集群用三个虚机部署的,工作节点都是3核5G的配置折腾了两天没有跑起来,后来放弃了,查了下&…

metricbeat实现容器监控

Metricbeat是elastic下的项目,在5.1及之后的版本中支持对Docker的监控,需与EK配合使用能在界面上显示,也可直接将数据导入kafka中。 -1.安装 使用版本: elasticsearch-5.2.0-1.noarch(用于输出显示) kibana-5.2.0-…

Centos 7.9 安装 ELK8.1.0+MetricBeat

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 目录 环境 一、前期准备: 1.下载ELKMetircBeat rpm包 2.CentOS 设置 二、安装Elasticsearch 1.安装rpm 2.配置Elasticsearch 修改配置档 开防火墙 设…

Storm Metric

storm从0.9.0开始,增加了指标统计框架,用来收集应用程序的特定指标,并将其输出到外部系统。 本文中采用的监听类是LoggingMetricsConsumer,统计指标值将输出到metric.log日志文件中。 当然也可以自定义监听类,只需要实…

Beats:如何启动 Metricbeat 中的 MySQL 模块 - query Metricset

在我做之前的教程 “Observability:Elastic Metrics 应用介绍”,我发现当我尝试启动 MySQL 模块中的 query metricset 会出现错误。之后我发现官方文档也缺少相应的资料。在今天的文章中,我将介绍如上启动这个 metricset。在使用这个 metrics…

Metricbeat源码分析

0X00 版本信息 Golang:1.16.8 Metricbeat:7.14 0X01 Metricbeat介绍 Metricbeat quick start: installation and configuration | Metricbeat Reference [7.14] | Elastichttps://www.elastic.co/guide/en/beats/metricbeat/7.14/metricbeat-install…

Elk-Metricbeat配置Tomcat的日志分析 (Metricbeat-part3)

1, 安装软件 Metricbeat安装 请参考之前的文档链接: Metricbeat 8.4.0 linux 安装(Metricbeat-part1)_yangkei的博客-CSDN博客Metricbeat 能够以一种轻量型的方式,输送各种系统和服务统计数据,从 CPU 到内存,从 Redis 到 Nginx…

Metricbeat config file metricbeat.yml must be owned by the user identifier (uid=0) or root

Linux 上修改呢metricbeat.yml的权限,启动的时候报错。查了下解决方案 记录下 https://www.elastic.co/guide/en/beats/libbeat/5.3/config-file-permissions.html#config-file-permissions 简而言之就是所有者必须是root,然后权限必须是0644 sudo c…

Elk-Metricbeat配置Nginx的日志分析 (Metricbeat-part2)

1 情况说明: Metricbeat的基本安装部分可以参考: Metricbeat 8.4.0 linux 安装(Metricbeat-part1)_yangkei的博客-CSDN博客 下面来聊聊如何通过elkmetricbeat来监控Nginx日志。 借用网上以为大师的图就是这样子 Metricbeat 采集 Nginx 指标_叶康铭的…

metricbeat收集elasticsearch、kibana监控数据

一、kibana 1、下载metricbeat并部署到kibana所在的服务器 2、禁用 Kibana 监控指标的默认集合,在kibana.yml文件中增加如下配置: monitoring.kibana.collection.enabled: false3、从控制台或命令行,在生产集群上设置xpack.monitoring.col…

ELK日志采集平台(四)---轻量级采集工具metricbeat

目录 一、安装metricbeat 二、与kibana数据可视化联用 logstash是负责采集数据的,是入口,流向为logstash-> ES->kibana,但是它的资源消耗很大,有时候没那么多内存给他占用,同时有些定制的采集指标logstash无法…

Metricbeat安装下载,nginx模块使用

目录 MetricbeatMetricbeat组成下载启动Metricbeat Modulesystem module配置内容 Nginx Module开启Nginx Module 配置nginx module测试 Metricbeat 定期收集操作系统或应用服务的指标数据存储到Elasticsearch中,进行实时分析 Metricbeat组成 Metricbeat有2部分组成…