Kafka 安装以及相关概念
实验环境
win10下,使用hyper-v安装虚拟机Ubuntu18。
装机问题
新安装的虚拟机,用于实验kafka服务,不能通过Windows版本的xShell连接到虚拟机。
解决:新虚拟机可能没有安装或没启动sshd服务,通过安装sshd或启动服务解决
sudo apt install openssh-server -y
安装服务
安装jdk
kafka和zookeeper是需要jre运行的,因此需要预先安装jre,推荐安装jdk8或以上。
apt install openjdk-8-jre-headless
# 安装完成后,输入java -version能返回版本号即可
安装zookeeper
- 通过df -h查找一个空间较大的路径,新建目录zookeeper
- zookeeper下创建一个app文件夹用于存放源代码,创建一个data目录用于存放数据
- 在zookeeper目录下执行
wget http://mirror.bit.edu.cn/apache/zookeeper/zookeeper-3.4.14/zookeeper-3.4.14.tar.gz
下载zookeeper项目到当前zookeeper文件夹下
-
修改配置文件
cd app/zookeeper-3.4.14/conf
可以找到zoo_sample.cfg文件,这是一个配置模板,在当前目录复制一份并命名为zoo.cfg
cp zoo_sample.cfg zoo.cfg
当前版本只需要修改数据路径即可,
-
进到bin文件夹中,执行启动命令
cd ../bin ./zkServer.sh start
在输出中可以看到,使用了刚才修改过的配置文件
-
监控2181端口,可以找到进程
安装kafka
- 和zookeeper文件夹平级的创建一个kafka文件夹,并在kafka里面再创建一个app文件夹和logs文件夹
- cd 到kafka文件夹中执行
wget http://mirror.bit.edu.cn/apache/kafka/2.1.1/kafka_2.12-2.1.1.tgz
把压缩包解压到app中
tar zxvf kafka_2.12-2.1.1.tgz -C app/
-
修改配置项
vim kafka/app/kafka_2.12-2.1.1/config/server.properties
主要修改log.dirs,这个目录用来持久化消息的。最后面有一个zookeeper的配置,这个需要指向刚刚启动的zookeeper
- 启动服务 ,cd到kafka/bin下
./kafka-server-start.sh -daemon /home/root1/kafka/app/kafka_2.12-2.1.1/config/server.properties # 可以调用 ./kafka-server-start.sh --help 查看用法
-
创建一个topic
./kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic testA
-
查看topic
./kafka-topics.sh --zookeeper localhost:2181 --describe --topic testA
-
发送消息到topic
./kafka-console-producer.sh --broker-list localhost:9092 --topic testA
-
接收刚发送的消息
./kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic testA --from-beginning
概念
图
broker
中间服务。每个broker代表一个kafka服务,多个broker组成kafka集群。broker接收来自生产者的消息,为消息设置偏移量,并提交消息到磁盘保存。broker为消费者提供服务,对读取分区的请求作出响应,返回已经提交到磁盘上的消息。根据特定的硬件及其性能特征,单个 broker 可以轻松处理数千个分区以及每秒百万级的消息量。
producer
生产者。发送消息,默认的会把指定topic发送到topic对应的partition中(默认是round-robin)。
consumer
消费者。按指定规则消费发送者发送的消息。
consumerGroup
消费者组。用于消费者分组,每个组可以有多个消费者。组内消费者数量的增减是kafka横向扩容高性能的主要体现。group中的consumer数量最大应该和partition的数量一致,如果consumer数量高于partition的数量,会导致多余的consumer无法利用。由于数据发送比数据接收要快得多,因此也可以启用多个consumerGroup去消费一个partition,保证缓冲区不会溢出。消费者是消费者群组的一部分,也就是说,会有一个或多个消费者共同读取一个主题。群组保证每个分区只能被一个消费者使用。
topic
主题。。主题就好比数据库的表,或者文件系统里的文件夹。是消息的主要标识,用于附着在消息对象上,标识消息应该被什么样的消费者接收。要注意,由于一个主题一般包含几个分区,因此无撞在整个主题范围内保证消息的顺序,但可以保证消息在单个分区内的顺序。
partition
分区。一个topic可以分成多个partition,数据结构类似队列(FIFO),一个topic对应的一堆partition可以存在不同的机器上,通过利用多台机器进行性能扩展。
offset
偏移量。一般用于消费者从partition中取消息时定位用。它是 个不断递增的整数值,在创建消息时, Kafka 会把它添加到消息里。在给定的分区里,每个悄息的偏移量都是唯 的。消费者把每个分区最后读取的悄息偏移量保存在 Zookeeper Kafka 上,如果悄费者关闭或重启,它的读取状态不会丢失。