《Kafka系列》Kafka详细教程入门

Kafka是一种高性能的分布式消息中间件,支持发布订阅和点对点模式。它提供了高吞吐量、数据持久化和分布式扩展性。本文详细介绍了Kafka的原理、安装步骤、快速入门及API操作,包括创建、查询和管理主题,以及生产者和消费者的使用。此外,还提到了Kafka与RabbitMQ、Redis等其他消息队列的对比,以及Flume与Kafka的集成。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Kafka

1 消息队列——消息中间件

1.1 消息队列的作用

在这里插入图片描述

1.2 消息队列的概念——MQ

  • Message
在互联网中,多台设备产生通信的数据的总称:可以是视频、文本、音频等等。
  • Quene
一种特殊的线性表,满足先进先出的原则。

1.3 消息队列的种类

MQ分为两种:
P2P : peer to peer
Pub/Sub : 发布与订阅
1.3.1 peer to peer

在这里插入图片描述

1.3.2 pub/sub

在这里插入图片描述

1.3.3 二者之间的区别
共同点:
消息生产者将消息生产到队列,消息消费者从队列中消费消息。
不同点:
p2p:一个生产者生产的消息只能被一个消费者消费。打电话
pub/sub:每个消息都可以有多个消费者消费,说明消息存在队列中。所以他使用偏移量方式管理消息
1.3.4 常见的消息队列

RabbitMQ : erlang编写。支持负载均衡,数据持久化。pub/sub\p2p

Redis : kv的nosql的缓存数据库,但是也支持pub/sub。对于短消息(小于10kb)的性能RabbitMQ 还好。

zeroMQ:轻量级的MQ。P2P

ActiveMQ:JMS实现,P2P,持久化,分布式事务

Kafka/Jafka:高性能跨语言分布式基于发布/订阅的全分布式支持数据持久化,也可以离线或者实时处理数据的。

RocketMQ:纯Java实现。发布/订阅,本地事务和分布式事务

2 Kafka快速入门

2.1 介绍

kafka是分布式的基于消息的发布-订阅的消息队列。LinkedIn(领英),Scala编写的

在这里插入图片描述

2.2 三大特点

  • 高吞吐量

可满足每秒百万级别的消息的生产和消费

  • 持久性

具备一套完整的消息的存储机制,可以确保消息数据的高效的安全的持久化

  • 分布式

既有扩展以及容错性。

2.3 kafka服务

  • topic : 主题,kafka处理的消息分为不同的分类,分类就是按照主题来划分。
  • broker:消息服务器的代理。kafka集群中的一个节点一般我都门都叫做一个broker;主要是用来存储消息。存在硬盘中。
  • partition:分区。Topic的在物理上的分组。一个topic在broker上被分为1个或者多个partition。分区在创建主题的时候指定的。
  • message:消息,通信的基本单位,每个消息属于某一个partition
  • Producer: 生产者,消息和数据都是由这个组件产生的,由它发送到kafka集群中的。
  • Consumer:消费者,消息和数据都是由这个组件来消费的。
  • Zookeeper: 他需要zk来做分布式协调

3 Kafka安装

3.1 安装

##1. 解压安装
[root@hadoop software]# tar -zxvf kafka_2.11-1.1.1.tgz -C /opt/apps/
[root@hadoop apps]# mv kafka_2.11-1.1.1/ kafka-1.1.1/
[root@hadoop kafka-1.1.1]# vi /etc/profile
## 自定义环境变量
export JAVA_HOME=/opt/apps/jdk1.8.0_261
export HADOOP_HOME=/opt/apps/hadoop-2.8.1
export HIVE_HOME=/opt/apps/hive-1.2.1
export HBASE_HOME=/opt/apps/hbase-1.2.1
export COLLECT_HOME=/opt/apps/collect-app
export FRP_HOME=/opt/apps/frp
export SCRIPT_HOME=/opt/apps/scripts
export SQOOP_HOME=/opt/apps/sqoop-1.4.7
export AZKABAN_HOME=/opt/apps/azkaban-solo-server
export SCALA_HOME=/opt/apps/scala-2.11.8
export SPARK_HOME=/opt/apps/spark-2.2.0
export KAFKA_HOME=/opt/apps/kafka-1.1.1

export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$HIVE_HOME/bin:$HBASE_HOME/bin
export PATH=$PATH:$COLLECT_HOME:$FRP_HOME:$SCRIPT_HOME:$SQOOP_HOME/bin:$KAFKA_HOME/bin
export CLASS_PATH=.:$JAVA_HOME/lib
export FLUME_HOME=/opt/apps/flume-1.9.0
export PATH=$PATH:/opt/apps/flume-1.9.0/bin:$AZKABAN_HOME/bin:$SCALA_HOME/bin:$SPARK_HOME/bin:$SPARK_HOME/sbin

##2. server.properties

# The id of the broker. This must be set to a unique integer for each broker.
broker.id=1 ## kafka的broker id的值,是一个整数,在集群中不能出现重复
############################# Log Basics #############################

# A comma separated list of directories under which to store log files
log.dirs=/opt/apps/kafka-1.1.1/logs ## kafka的日志文件的路径

############################# Zookeeper #############################
zookeeper.connect=hadoop:2181/kafka ## kafka的一些数据在zk中的目录

##3. 接下来是全分布式的操作
##3.1 拷贝,将本机的kafka-1.1.1目录拷贝到其他的节点上
scp -r $KAFKA_HOME/ hadoop2:/opt/apps
scp -r $KAFKA_HOME/ hadoop3:/opt/apps

##3.2 修改server.properties
# The id of the broker. This must be set to a unique integer for each broker.
broker.id=2 ## kafka的broker id的值,是一个整数,在集群中不能出现重复

3.2 启动测试

##1. 如果是全分布式,请先启动zk的集群,如果不是全分布式请先启动kafka自带的zk的脚本。
[root@hadoop bin]# sh zookeeper-server-start.sh -daemon $KAFKA_HOME/config/zookeeper.properties
##2. 启动kafka的服务
[root@hadoop bin]# sh kafka-server-start.sh -daemon $KAFKA_HOME/config/server.properties

##3. 测试zk客户端连接zk服务
[root@hadoop bin]# sh zookeeper-shell.sh localhost:2181

4 Kafka的基本操作

4.0 kafka在zookeeper中的目录说明

cluster

​ - id : {“version”:“1”,“id”:“_8TJvXJoQPqD1b2Vr-BVBA”} -> 包含了集群版本和集群的id

controller : {“version”:1,“brokerid”:1,“timestamp”:“1623914309134”} -> 控制partition的leader选举,topic的crud。当前集群中的brokerid=1的broker充当了controller的角色

controller_epoch :1。表示controller的纪元。表示controller的迭代。每当controller换一个broker,值自增1

brokers

​ -ids [1, 2, 3] -> 当前kafka中的broker的实例列表

​ -topics:[hadoop] --> 当前的kafka的主题列表

​ -seqid : 系统的序列id

consumers :

​ 老版本的kafka中适用于存放kafka的消费者信息,主要保存从就偏移量。

​ 新版本基本不用,消费的偏移量记录在集群中的broker节点的磁盘中,$KAFKA_HOME/logs/__consumer_offsets

config : 存放配置信息

4.1 Topic操作

4.1.1 创建主题
[root@hadoop bin]# kafka-topics.sh \
> --create \ ## 创建事件
> --topic hadoop \ ## 主题名称
> --zookeeper hadoop/kafka \ ## kafka关联zk的地址
> --partitions 3 \ ## 分区数
> --replication-factor 1 ## 副本因子的个数必须要小于等于broker的实例的个数
Created topic "hadoop".
4.1.2 列举主题列表
[root@hadoop kafka-1.1.1]# kafka-topics.sh \
> --list \
> --zookeeper hadoop:2181/kafka
hadoop
4.1.3 查看主题详情

[root@hadoop kafka-1.1.1]# kafka-topics.sh \
> --describe \
> --topic hadoop \
> --zookeeper hadoop:2181/kafka
Topic:hadoop    PartitionCount:3        ReplicationFactor:3     Configs:
        Topic: hadoop   Partition: 0    Leader: 1       Replicas: 1,3,2     Isr: 1,3,2
        Topic: hadoop   Partition: 1    Leader: 2       Replicas: 2,1,3     Isr: 2,1,3
        Topic: hadoop   Partition: 2    Leader: 3       Replicas: 3,2,1     Isr: 3,2,1
        
Partition: 当前的主题的分区号
Replicas:副本因子,当前kafka对应的分区所在的broker实例的brokerid
Leader:当前的kafka对应分区的broker中的leader,只有leader才负责处理读写请求
Isr:该分区存活的副本对用的broker的borkerid
4.1.4 修改主题
[root@hadoop kafka-1.1.1]# kafka-topics.sh \
> --alter \
> --topic hadoop \
> --partitions 4 \
> --zookeeper hadoop:2181/kafka

tip: 修改分区,只能+,不能-
4.1.5 删除主题
[root@hadoop kafka-1.1.1]# kafka-topics.sh \
> --delete \
> --topic hadoop \
> --zookeeper hadoop:2181/kafka
Topic hadoop is marked for deletion.
Note: This will have no impact if delete.topic.enable is not set to true.

4.2 测试kafka的生产与消费能力

4.2.1 开启生产端
[root@hadoop bin]# sh kafka-console-producer.sh \
> --topic hadoop \
> --broker-list hadoop:9092
> 
4.2.2 开启消费端
[root@hadoop bin]# sh kafka-console-consumer.sh \
> --topic hadoop \
> --bootstrap-server hadoop:9092

4.2.3 消费者消费总结

​ kafka消费者在消费数据的时候,一般都是分组的。这个分组叫做消费者组。不同组的消费相互之间不影响。相同组内的消费,同组内的偏移量相互影响;但是需要注意的是,如果你的分区是3个,那么你的消费者组内的消费者最优是3个,因为再多也没有用了,因为组内的消费者,一个消费者消费一个主题的分区。

在这里插入图片描述

[root@hadoop bin]# sh kafka-console-consumer.sh \
> --topic hadoop \
> --group default \ ##指定到default的消费者组
> --bootstrap-server hadoop:9092 \
> --partition 2 ## 消费分区2
> --offset ealiest ## 从什么位置开始消费

在这里插入图片描述

5 Kafka的API操作

5.1 导入依赖

<!-- kafka -->
<dependency>
    <groupId>org.apache.kaf
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

DATA数据猿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值