Kafka基础和shell操作 (一)

Kafka 官方:https://kafka.apache.org/documentation/#producerapi

Kafka 下载:http://archive.apache.org/dist/kafka/

专有名词

MQ:消息队列是一种异步的服务间通信方式,是分布式系统中重要的组件,主要解决应用耦合,异步消息,流量削锋等问题,实现高性能,高可用,可伸缩和最终一致性架构;【基于队列的消息传递或缓存,有发布订阅模式、点对点模式两种模式】

kafka是MQ中的一种:
  1. Topic:数据主题,对数据分类(类似于MySQL中表的概念)
  2. Broker:kafka是一个分布式集群,由多台服务器构组成,每天kafka的节点就是一个Broker;
  3. Producer:消息生产者、数据写入Topic者,现实多为数据采集工具;
  4. Consumer:数据消费者、从Topic中获取数据者,获取消息的客户端;
  5. Consumer Group:每个Consumer必属于某一个Consumer Group,kafka中的消息必须以消费者组为单位进行订阅
  6. Partition:数据分区,kafka是分布式存储、一个Topic可以划分为多个分区Partition
  7. Replication:主从副本机制,为了保障数据的安全性,kafka将分区的副本划分两种角色:
    • Leader:主要负责对外的读写
    • Follower:与Leader 同步数据、如果Leader故障,从Follower中选举新的Leader对外提供读写
  8. Segment:分区段,每个分区可以对应多个Segment,由两组数据*.log 、.index、.timeindex Segment文件
  9. Offset:偏移量,每条数据在分区中的偏移量,Kafka中的消费者都是按照Offset 来读取数据,从0开始
    在这里插入图片描述

Kafka 架构

架构角色:①Kafka 是分布式的主从架构,实现消息队列的构建;②Zookeeper 辅助选举Controller、原数据管理
分布式公平主从架构: ①主节点-Kafka Controller ②从节点-Kafka Broker

  • 公平主从架构:主节点和从节点的功能是类似的,如果主节点故障,允许从节点选举成为主节点
  • Zookeeper: Kafka架构依赖ZK实现选举,所有存活的Kafka节点会到ZK中创建临时节点,谁创建成功谁就是主节点,其次是元数据管理
  • Kafka Controller
    • 是一种特殊的Broker,从所有Broker中选举出来的,负责普通Broker的工作
    • 负责管理所有从节点:Topic、分区和副本
    • 每次启动集群,会从所有Broker中选举一个Controller,由ZK实现
  • Kafka Broker
    • 对外提供读写请求
    • 其他的Broker监听Controller,如果Controller故障,会重新从Broker选举一个新的Controller

Kafka 安装后后目录

# kafka版本: kafka_2.12-2.4.1.tgz
tar -zxvf kafka_2.12-2.4.1.tgz -C /export/server/
cd /export/server/kafka_2.12-2.4.1/
mkdir logs
  • bin:一般用于存放客户端操作命令脚本
  • sbin:一般用于存放集群的启动和关闭的命令脚本,如果没有这个命令,脚本放在bin目录中
  • conf/etc/config:配置文件目录
  • lib:jar包的存放目录
  • logs:一般用于存放服务日志
修改配置文件
  • 1 切换到配置文件目录 [ node1 ]
cd /export/server/kafka_2.12-2.4.1/config

在这里插入图片描述

  • 2 修改server.properties [ node1 ]
#21行:唯一的 服务端id
broker.id=0
#60行:指定kafka的日志及数据【segment【.log + .index】】存储的位置
log.dirs=/export/server/kafka_2.12-2.4.1/logs 
#123行:指定zookeeper的地址
zookeeper.connect=node1:2181,node2:2181,node3:2181
#在最后添加两个配置,允许删除topic,当前kafkaServer的主机名
delete.topic.enable=true
host.name=node1
  • 3 分发放到 node2 node3 两个节点 [ node1 ]
cd /export/server/
scp -r kafka_2.12-2.4.1 node2:$PWD
scp -r kafka_2.12-2.4.1 node3:$PWD
  • 4 node2修改 server.properties
#21行:唯一的 服务端id
broker.id=1
#最后
host.name=node2
  • 5 node3 修改 server.properties
#21行:唯一的 服务端id
broker.id=2
#最后
host.name=node3
  • 6 在node1、node2、node3 添加环境变量
vim /etc/profile
#KAFKA_HOME
export KAFKA_HOME=/export/server/kafka_2.12-2.4.1
export PATH=:$PATH:$KAFKA_HOME/bin
source /etc/profile

Kafka 启动与关闭

  • 1 启动Zookeeper
start-zk-all.sh 
  • 2 启动Kafka
bin/kafka-server-start.sh config/server.properties >>/dev/null 2>&1 &
  • 3 关闭Kafka
bin/kafka-server-stop.sh 

Kafka shell

常用的命令

  • 1 创建Topic
kafka-topics.sh --create --topic topicName --partitions 3 --replication-factor 2 --bootstrap-server node1:9092,node2:9092,node3:9092
- -create:创建
- -topic:指定名称
- -partitions :分区个数
- -replication-factor:分区的副本个数
- -bootstrap-server:指定Kafka服务端地址
- -list:列举
  • 2 列举Topic
kafka-topics.sh --list -bootstrap-server node1:9092,node2:9092,node3:9092
  • 3 查看Topic信息
kafka-topics.sh --describe --topic bigdata01  --bootstrap-server node1:9092,node2:9092,node3:9092

Topic: bigdata01        PartitionCount: 3       ReplicationFactor: 2  
Topic: bigdata01        Partition: 0    Leader: 0       Replicas: 0,1   Isr: 1,0
Topic: bigdata01        Partition: 1    Leader: 2       Replicas: 2,0   Isr: 2,0
Topic: bigdata01        Partition: 2    Leader: 1       Replicas: 1,2   Isr: 2,1
- Topic: bigdata01        Partition: 0    Leader: 0       Replicas: 0,1   Isr: 1,0
- Topic:这个分区所属的Topic的名称
- Partition:这个分区在这个Topic中的编号
  - 怎么唯一决定一个分区:Topic名称 + 分区编号
- Leader:当前这个分区的leader副本在哪台brokerid节点上
  - 0:第一台机器
  - 1:第二台机器
  - 2:第三台机器
- Rplicas:这个分区所有副本所在节点的Brokerid
  - 分区0,总共有两个副本,分别在第一台机器和第二台机器
  - 分区1,总共有两个副本,分别在第三台机器和第一台机器
  - 分区2,总共有两个副本,分别在第二台机器和第三台机器
- ISR:当前这个分区可用副本
  • 4 删除Topic
kafka-topics.sh --delete --topic bigdata02  --bootstrap-server node1:9092,node2:9092,node3:9092

在这里插入图片描述

  • 5 修改Topic
kafka-topics.sh --alter 
--topic bigdata02 分区/副本/属性=值 --bootstrap-server node1:9092,node2:9092,node3:9092
  • 6 Console 生产者
bin/kafka-console-producer.sh --topic bigdata01 --broker-list ode1:9092,node2:9092,node3:9092

在这里插入图片描述

  • 7 Console 消费者
bin/kafka-console-consumer.sh --topic bigdata01 --bootstrap-server node1:9092,node2:9092,node3:9092  --from-beginning

-- from-beginning:从每个分区的最初开始消费,默认从最新的offset进行消费

在这里插入图片描述

Kafka集群压力测试

实施

  • 1 创建Topic
  kafka-topics.sh --create --topic bigdata --partitions 2 --replication-factor 2 --bootstrap-server node1:9092,node2:9092,node3:9092
  • 2 生产测试
  kafka-producer-perf-test.sh --topic bigdata --num-records 1000000 --throughput -1 --record-size 1000 --producer-props bootstrap.servers=node1:9092,node2:9092,node3:9092 acks=1
  • --num-records:写入数据的条数
  • --throughput:是否做限制,-1表示不限制
  • --record-size:每条数据的字节大小
    在这里插入图片描述
  • 3 消费测试
kafka-consumer-perf-test.sh --topic bigdata --broker-list node1:9092,node2:9092,node3:9092  --fetch-size 1048576 --messages 1000000

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值