Kafka详解以及常见kafka基本操作

1、 kafka 是什么,有什么作用

Kafka是一个开源的高吞吐量的分布式消息中间件,对比于缓冲和削峰:上游数据时有突发流量,下游可能扛不住,或者下游没有足够多的机器来保证冗余,kafka在中间可以起到一个缓冲的作用,把消息暂存在kafka中,下游服务就可以按照自己的节奏进行慢慢处理。

kafka作用:

  1. 解耦和扩展性:项目开始的时候,并不能确定具体需求。消息队列可以作为一个接口层,解耦重要的业务流程。只需要遵守约定,针对数据编程即可获取扩展能力。
  2. 冗余:可以采用一对多的方式,一个生产者发布消息,可以被多个订阅topic的服务消费到,供多个毫无关联的业务使用。
  3. 健壮性:消息队列可以堆积请求,所以消费端业务即使短时间死掉,也不会影响主要业务的正常进行。
  4. 异步通信:很多时候,用户不想也不需要立即处理消息。消息队列提供了异步处理机制,允许用户把一个消息放入队列,但并不立即处理它。想向队列中放入多少消息就放多少,然后在需要的时候再去处理它们。

2、Kafka 的基本概念

1.消息队列(Message Broker)

Kafka 是一个消息队列系统,负责接收、存储和传递消息。它可以作为多个系统之间的数据传输中介。
2.主题(Topic)

Kafka 中的消息按主题进行组织。生产者将消息发布到特定的主题,消费者从这些主题中读取消息。一个主题可以包含多个分区(Partition)。
3.分区(Partition)

每个主题可以分成多个分区,分区是 Kafka 中数据的基本存储单元。分区提供了数据的并行处理能力,提高了吞吐量和性能。
4.生产者(Producer)

生产者是向 Kafka 主题发送消息的客户端。生产者将消息发布到一个或多个主题的分区中。
5.消费者(Consumer)

消费者是从 Kafka 主题中读取消息的客户端。消费者可以组成消费者组(Consumer Group),以实现负载均衡和高可用性。
6.代理(Broker)

Kafka 集群由多个代理节点组成,每个代理节点负责处理和存储消息。代理节点的集合形成了 Kafka 集群。
7.Zookeeper

Kafka 使用 Zookeeper 来进行集群管理、节点协调以及元数据存储。Zookeeper 确保 Kafka 集群的一致性和可靠性。

3、Kafka 的常见使用场景

1.实时数据流处理

Kafka 能够处理高吞吐量的数据流,适合用于实时数据处理和分析。例如,监控系统实时收集和处理系统日志。
2.日志聚合

将来自不同来源的日志集中到 Kafka 中进行统一管理和分析。可以将日志数据推送到数据仓库或分析系统中。
3.事件驱动架构

使用 Kafka 作为事件传递和处理的核心组件,支持构建基于事件的系统架构。这可以用来实现微服务之间的解耦和异步通信。
4.数据湖和数据管道

Kafka 可以作为数据管道的核心,将实时数据流送入数据湖或其他存储系统。它还可以用作 ETL(提取、转换、加载)过程的一部分。
5.网站活动追踪

追踪用户在网站上的行为,并将这些数据实时送入 Kafka。随后,这些数据可以用于个性化推荐和用户行为分析。
6.消息系统

Kafka 作为企业级的消息系统,可以用于处理各种业务事件和消息,替代传统的消息队列系统。

总之,Kafka 的高吞吐量、低延迟和高可扩展性使其成为处理大规模数据流的理想选择,适合用于各种实时数据处理和传输场景。

3、Kafka为什么这么快

利用Partition 实现并行处理。不同 Partition 可位于不同机器,因此可以充分利用集群优势,实现机器间的并行处理。另一方面,由于Partition 在物理上对应一个文件夹,即使多个Partition位于同一节点,也可通过配置让同一节点上的不同Partition 置于不同的磁盘上,从而实现磁盘间的并行处理,充分发挥多磁盘的优势。

  • 利用了现代操作系统分页存储 Page Cache 来利用内存提高I/O效率
  • 顺序写kafka的消息是不断追加到文件中的,这个特性使kafka可以充分利用磁盘的顺序读写性能,由于现代的操作系统提供了预读和写技术,磁盘的顺序写大多数情况下比随机写内存还要快。顺序读写不需要磁盘磁头的寻道时间,只需很少的扇区旋转时间,所以速度远快于随机读写
  • Zero-copy零拷技术减少拷贝次数
  • 数据批量处理,合并笑的请求,然后以流的方式进行交互,直顶网络上限。在很多情况下,系统的瓶颈不是 CPU 或磁盘,而是网络IO。因此,除了操作系统提供的低级批处理之外,Kafka 的客户端和 broker 还会在通过网络发送数据之前,在一个批处理中累积多条记录 (包括读和写)。记录的批处理分摊了网络往返的开销,使用了更大的数据包从而提高了带宽利用率。
  • Pull 拉模式 使用拉模式进行消息的获取消费,与消费端处理能力相符。
  • 数据压缩 Kafka还支持对消息集合进行压缩,Producer可以通过GZIP、Snappy、LZ4格式对消息集合进行压缩,数据压缩一般都是和批处理配套使用来作为优化手段的。压缩的好处就是减少传输的数据量,减轻对网络传输的压力 Producer压缩之后,在Consumer需进行解压,虽然增加了CPU的工作,但在对大数据处理上,瓶颈在网络上而不是CPU,所以这个成本很值得

4、Kafka架构及名词解释

简易架构图如下:

详细架构图如下:

  • Broker:一台kafka服务器就是一个broker。一个集群由多个broker组成。一个broker可以容纳多个topic。
  • Producer:消息生产者,向kafka broker发送消息的客户端。
  • Consumer:消息消费者,向kafka broker取消息的客户端。
  • Topic:队列,生产者和消费者通过此进行对接。
  • Consumer Group(CG):若干个Consumer组成的集合。这是kafka用来实现一个topic消息的广播(发给所有的consumer)和单播(发给任意一个consumer)的手段。一个topic可以有多个CG。topic的消息会复制(不是真的复制,是概念上的)到所有的CG,但每个CG只会把消息发给该CG中的一个consumer。如果需要实现广播,只要每个consumer有一个独立的CG就可以了。要实现单播只要所有的consumer在同一个CG。用CG还可以将consumer进行自由的分组而不需要多次发送消息到不同的topic。
  • Partition:分区,为了实现扩展性,一个topic可以分布在多个broker上,一个topic可以分为多个partition,每个partition都是一个有序的队列。partition中的每条消息都会被分配一个有序的id(offset)。kafka只保证同一个partition中的消息顺序,不保证一个topic的整体(多个partition之间)的顺序。生产者和消费者使用时可以指定topic中的具体partition。
  • 副本:在kafka中,每个主题可以有多个分区,每个分区又可以有多个副本。这多个副本中,只有一个是leader,而其他的都是follower副本。仅有leader副本可以对外提供服务。多个follower副本通常存放在和leader副本不同的broker中。通过这样的机制实现了高可用,当某台机器挂掉后,其他follower副本也能迅速"转正",开始对外提供服务。
  • offset:消费偏移量,topic中的每个分区都是有序且顺序不可变的记录集,并且不断地追加到结构化的log文件。分区中的每一个记录都会分配一个id号来表示顺序,我们称之为offset,offset用来唯一的标识分区中每一条记录。可以设置为"自动提交"与"手动提交"。

5、kafka常见操作

创建topic

使用shell新开一个node01的窗口

kafka-topics.sh --bootstrap-server node01:9092 --create --topic topic-test --partitions 2 --replication-factor 1

解释:

--replication-factor 1 #复制两份

--partitions 2 #创建1个分区

--topic #主题为topic-test

查看topic

查看所有的topic

kafka-topics.sh --bootstrap-server node001:9092 --list

查看某一个topic

kafka-topics.sh --describe --bootstrap-server node001:9092 --topic topic-test

删除topic

kafka-topics.sh --bootstrap-server node001:2181 --delete --topic aa   # 删除aa这个topic

启动控制台生产者

kafka-console-producer.sh --broker-list node001001:9092 --topic topic-test

启动控制台消费者

使用shell再开一个node002的窗口

kafka-console-consumer.sh --bootstrap-server node001:9092 --topic topic-test --from-beginning
相关推荐
运维&陈同学21 分钟前
【zookeeper01】消息队列与微服务之zookeeper工作原理
运维·分布式·微服务·zookeeper·云原生·架构·消息队列
时差95324 分钟前
Flink Standalone集群模式安装部署
大数据·分布式·flink·部署
菠萝咕噜肉i36 分钟前
超详细:Redis分布式锁
数据库·redis·分布式·缓存·分布式锁
Mephisto.java39 分钟前
【大数据学习 | Spark】Spark的改变分区的算子
大数据·elasticsearch·oracle·spark·kafka·memcache
只因在人海中多看了你一眼4 小时前
分布式缓存 + 数据存储 + 消息队列知识体系
分布式·缓存
zhixingheyi_tian7 小时前
Spark 之 Aggregate
大数据·分布式·spark
KevinAha8 小时前
Kafka 3.5 源码导读
kafka
求积分不加C8 小时前
-bash: ./kafka-topics.sh: No such file or directory--解决方案
分布式·kafka
nathan05298 小时前
javaer快速上手kafka
分布式·kafka
激流丶11 小时前
【Kafka 实战】Kafka 如何保证消息的顺序性?
java·后端·kafka