Kafka的分布式安装及基本操作-刘宇

作者:刘宇
CSDN博客地址:https://blog.csdn.net/liuyu973971883
有部分资料参考,如有侵权,请联系删除。如有不正确的地方,烦请指正,谢谢。

一、Kafka的分布式安装

1、前期准备

  • 三台服务器并安装好zookeeper集群
  • kafka的安装包或者源码包
    安装包:http://archive.apache.org/dist/kafka/1.1.1/kafka_2.11-1.1.1.tgz
    源码包:http://archive.apache.org/dist/kafka/1.1.1/kafka-1.1.1-src.tgz

2、安装过程

2.1、解压安装包

tar -zxvf /software/kafka_2.11-1.1.1.tgz -C /software/

2.2、重命名

mv /software/kafka_2.11-1.1.1/ /software/kafka

2.3、添加环境变量

修改环境变量文件:vi /etc/profile

#添加如下代码
export KAFKA_HOME=/software/kafka
export PATH=$PATH:$KAFKA_HOME/bin

立即生效:source /etc/profile

2.4、修改配置文件

vi /software/kafka/config/server.properties

#当前kafka实例的id,必须为整数,一个集群中不可重复
broker.id=1
#生产到kafka中的数据存储的目录,目录需要手动创建
log.dirs=/software/kafka/data/kafka-logs
#kafka数据在zk中的存储目录
zookeeper.connect=192.168.40.101:2181,192.168.40.102:2181,192.168.40.103:2181/kafka

2.5、同步到其他服务器

scp -r kafka/ root@192.168.40.102:/software/
scp -r kafka/ root@192.168.40.103:/software/

2.6、分别修改两台服务器上的broker的id

#192.168.40.102上修改为12
broker.id=2
#192.168.40.103上修改为13
broker.id=3

2.7、创建数据目录

mkdir -p /software/kafka/data/kafka-logs

2.8、启动Kafka

分别启动三台服务器上的Kafka

cd /software/kafka/bin
./kafka-server-start.sh -daemon ../config/server.properties

启动成功
在这里插入图片描述

2.9、检查集群是否启动成功

登录zookeeper

cd /software/zookeeper-3.4.14/bin
./zkCli.sh
ls /kafka/brokers/ids

出现三个节点则表示三台kafka搭建成功
在这里插入图片描述

二、Kafka在zookeeper中的目录说明

/kafka
	/cluster
		/id {"version":"1","id":"Pks8sWZUT6GBJHqyVGQ5OA"}#代表的是一个kafka集群包含集群的版本,和集群的id
	/controller {"version":1,"brokerid":1,"timestamp":"1564976668049"}#controller是kafka中非常重要的一个角色,意为控制器,控制partition的leader选举,topic的crud操作。brokerid意为由 其id对应的broker承担controller的角色。
	/controller_epoch#代表的是controller的纪元,换句话说是代表controller的更迭,每当controller 的brokerid更换一次,controller_epoch就+1.
	/brokers
		/ids [1, 2, 3]#存放当前kafka的broker实例列表
		/topics [hadoop, __consumer_offsets]#当前kafka中的topic列表
		/seqid#系统的序列id
	/consumers#老版本用于存储kafka消费者的信息,主要保存对应的offset,新版本中基本不用,此时用 户的消费信息,保存在一个系统的topic中:__consumer_offsets
	/config#存放配置信息

三、Kafka的基本操作

topic是kafka非常重要的核心概念,是用来存储各种类型的数据的,所以最基本的就需要学会如何在kafka中创建、修改、删除的topic,以及如何向topic生产消费数据。

1、创建topic

  • topic:指定要创建的topic的名称
  • zookeeper:指定kafka关联的zk地址
  • partitions:指定该topic的分区个数
  • replication-factor:指定副本因子
./kafka-topics.sh --create --topic hadoop --zookeeper 192.168.40.101:2181,192.168.40.102:2181,192.168.40.103:2181/kafka --partitions 3 --replication-factor 3


指定副本因子的时候,不能大于broker实例个数,否则报错:
在这里插入图片描述
zookeeper的前后变化
在这里插入图片描述
Kafka数据目录的变化
在这里插入图片描述

2、查看topic的列表

./kafka-topics.sh --list --zookeeper 192.168.40.101:2181,192.168.40.102:2181,192.168.40.103:2181/kafka

3、查看每一个topic的信息

./kafka-topics.sh --describe --topic hadoop --zookeeper 192.168.40.101:2181,192.168.40.102:2181,192.168.40.103:2181/kafka

3.1、topic信息讲解

  • Partition: 当前topic对应的分区编号
  • Replicas : 副本因子,当前kafka对应的partition所在的broker实例的broker.id的列表
  • Leader : 该partition的所有副本中的leader领导者,处理所有kafka在该partition读写请求
  • ISR : 该partition的存活的副本对应的broker实例的broker.id的列表
Topic:hadoop	PartitionCount:3	ReplicationFactor:3	Configs:
Topic: hadoop	Partition: 0	Leader: 3	Replicas: 3,2,1	Isr: 3,2,1
Topic: hadoop	Partition: 1	Leader: 1	Replicas: 1,3,2	Isr: 1,3,2
Topic: hadoop	Partition: 2	Leader: 2	Replicas: 2,1,3	Isr: 2,1,3

4、修改topic

注:partition个数,只能增加,不能减少

./kafka-topics.sh --alter --topic hadoop --partitions 4 --zookeeper 192.168.40.101:2181,192.168.40.102:2181,192.168.40.103:2181/kafka

5、删除topic

在老版本的时候,是不能直接删除掉topic,除非你配置了delete.topic.enable=true,可以直接删除掉,如果你没配置,那么就不会直接删除,会做一个标记,那么这个Topic就不能用了,而在新版本的时候,不需要设置这些参数了,直接删除掉了

./kafka-topics.sh --delete --topic hadoop --zookeeper 192.168.40.101:2181,192.168.40.102:2181,192.168.40.103:2181/kafka

6、生产和消费数据

6.1、生产数据

  • topic:往指定主题发生数据
  • broker-list:指定Kafka的broker列表
./kafka-console-producer.sh --topic hadoop --broker-list 192.168.40.101:9092,192.168.40.102:9092,192.168.40.103:9092

6.2、消费数据

启动消费者后发现之前的数据是获取不到的,如果想要获取消费者启动之前的数据,可以添加一个参数–from-beginning。但是如果该topic有多个分区则不能保证其消费的顺序性

./kafka-console-consumer.sh --topic hadoop --bootstrap-server 192.168.40.101:9092,192.168.40.102:9092,192.168.40.103:9092

四、 Kafka的数据消费的总结

  • topic:消费的主题
  • bootstrap-server:对应的zookeeper
  • group:该消费者所在的分组
  • offset:从该分区的什么位置开始消费
  • partition:消费哪一个分区中的数据(也可不设置)
./kafka-console-consumer.sh --topic hadoop --bootstrap-server 192.168.40.101:9092,192.168.40.102:9092,192.168.40.103:9092 --group haha --offset earliest --partition 2

kafka消费者在消费数据的时候,都是分组别的。不同组的消费不受影响,相同组内的消费,需要注意,如果partition有3个,消费者有3个,那么便是每一个消费者消费其中一个partition对应的数据;如果有2个消费者,此时一个消费者消费其中一个partition数据,另一个消费者消费2个partition的数据。如果有超过3个的消费者,同一时间只能最多有3个消费者能消费得到数据。

在这里插入图片描述
结论:

  • 在一个消费者组内消费数据,同一时间不会有两个消费者同时消费一个分区的数据
  • 在两个消费者组内,同一时间可以有两个消费者同时消费一个分区的数据

在组内,kafka的topic的partition个数,代表了kafka的topic的并行度,同一时间最多可以有多个线程来消费topic的数据,所以如果要想提高kafka的topic的消费能力,应该增大partition的个数。

五、 Kafka分区中的offset

是kafka的topic中的partition中的每一条消息的标识,如何区分该条消息在kafka对应的partition的
位置,就是用该偏移量。offset的数据类型是Long,8个字节长度。offset在分区内是有序的,分区间是不一定有序。如果想要kafka中的数据全局有序,就只能让partition个数为1。

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值