栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 大数据 > 大数据系统

Kafka基础和shell操作 (一)

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

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/673606.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号