IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> Kafka 一、介绍与使用 -> 正文阅读

[大数据]Kafka 一、介绍与使用

Kafka 一、介绍与使用

kafka是一个消息中间件,是一个分布式的,支持分区的,多副本的,基于zookeeper的分布式消息系统。

kafka基本概念

  • Broker :kafka集群中的每一个节点称为broker
  • Topic : kafka中消息根据topic分类,生产消息和消费消息必须要订阅topic
  • Partition :分区。每个topic下可以若干个分区,每个分区内部的消息都是有序的,是真正存储消息的区域
  • Producer :生产者,产生消息的客户端
  • Consumer :消费者,消费消息的客户端
  • GroupComsumer :组消费者,一条消息只能被一个组消费,如果有多个组订阅了相同的topic,每个组内都可以消费,且每个组只能有一个consumer客户端消费

安装并启动

kafka依赖jvm和zookeeper,需要先安装

zookeeper中存放了kafka broker的元数据信息

# 下载解压kafka
wget  https://archive.apache.org/dist/kafka/2.4.1/kafka_2.11-2.4.1.tgz
tar -zxcf kafka_2.11-2.4.1.tgz
#修改配置文件
cd kafka_2.11-2.4.1/config
vim server.properties
# broker.id=0 属性在kafka集群中必须要是唯一
# listeners=PLAINTEXT://192.168.10.102:9092 对外提供的地址+端口号
# log.dir=/data/kafka/kafka-logs kafka的消息存储文件
# zookeeper.connect=192.168.10.102:2181 kafka连接zookeeper的地址

#启动
../bin/kafka-server-start.sh -daemon server.properties

#查看是否启动成功,根据zookeeper中的节点
zkClis.sh
ls /brokers/ids #查看kafka节点

Kafka基本使用

创建topic

#指定分区数是1 副本数是1 topic名称是test
./kafka-topics.sh --create --zookeeper 192.168.10.102:2181 --replication-factor 1 --partitions 1 --topic test

删除topic

#删除名称是test的topic
./kafka-topics.sh --delete --topic test --zookeeper 192.168.10.102:2181

发送消息

#创建producer,指定topic为test 在默认情况下,每一个行会被当做成一个独立的消息
./kafka-console-producer.sh --broker-list 192.168.10.102:9092 --topic test
> 111
> 222
> 333

消费消息

# 消费test主题下的消息,默认消费最新的消息
./kafka-console-consumer.sh --bootstrap-server 192.168.10.102:9092 --topic test
# --from-beginning 从头开始消费
./kafka-console-consumer.sh --bootstrap-server 192.168.10.102:9092 --from-beginning --topic test
# ‐‐whitelist 消费多个topic
./kafka-console-consumer.sh --bootstrap-server 192.168.10.102:9092 --whitelist "test|test-2"

以上命令如果开启多个客户端的话,是都可以消费到生产者发来的消息的,默认不指定组的话,就是广播消息。如果我们希望启动多个客户端,只能有一个客户端去消费,就需要指定group

单播消费

# 启动两个客户端,执行相同的命令,只有一个客户端消费信息
./kafka-console-consumer.sh --bootstrap-server 192.168.10.102:9092 --consumer-property group.id=testGroup  --topic test

多播消费

# 启动两个客户端,分别使用不同的组去消费,都可以消费消息
./kafka-console-consumer.sh --bootstrap-server 192.168.10.102:9092 --consumer-property group.id=testGroup1  --topic test
./kafka-console-consumer.sh --bootstrap-server 192.168.10.102:9092 --consumer-property group.id=testGroup2  --topic test

生产者发送消息

> 111
> 222 
#断掉testGroup2消费组的客户端
> 333
> 444

查看消费组的列表

# 查询消费组列表
./kafka-consumer-groups.sh --bootstrap-server 192.168.10.102:9092 --list
# testGroup2
# testGroup1
# testGroup

分别查询消费组的状态

./kafka-consumer-groups.sh --bootstrap-server 192.168.10.102:9092 --describe --group testGroup1
./kafka-consumer-groups.sh --bootstrap-server 192.168.10.102:9092 --describe --group testGroup2

请添加图片描述

  • current-offset:当前消费组的已消费偏移量
  • log-end-offset:主题对应分区消息的结束偏移量(HW)
  • lag:当前消费组未消费的消息数

当group客户端断掉重启之后,默认会从current-offset开始消费


请添加图片描述

上面提到一个topic下可以有多个partition

partition是一个有序的message序列,会按照顺序添加到commit log文件中,每个partition中的消息都会有个唯一的编号offset。一个partition中的offset值是唯一的,不同的partition的offset可能会相同。所以consumer可以指定offset重复消费消息或者跳过某些消息。

kafka一般不会删除消息,不管这些消息有没有被消费。只会根据配置的日志保留时间(log.retention.hours)确认消息多久被删除,默认保留最近一周的日志消息。kafka的性能与保留的消息数据量大小没有关系,因此保存大量的数据消息日志信息不会有什么影响。

创建多分区主题

./kafka-topics.sh --create --zookeeper 192.168.10.102:2181 --replication-factor 1 --partitions 2 --topic test2
#查看topic的状态
./kafka-topics.sh --describe --zookeeper 192.168.10.102:2181  --topic test2

请添加图片描述

可以看到有两个partition,其他一些信息在集群部署时会用到

  • leader:表示哪个broker是leader,负责给定partition的所有读写请求
  • replicas: 表示在哪些broker机器上有副本
  • isr:是replicas的一个子集,它只列出当前还存活着的,并且已同步备份了该partition的broker

请添加图片描述
在kafka-logs目录下可以看到test2主题的两个分区

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2022-07-03 10:53:18  更:2022-07-03 10:57:13 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/19 20:33:42-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码