在Kafka中有一些基本的概念,
Topic
简介:Topic在Kafka中是一个抽象的概念,一个主题是已经发布的记录的种类。主题在Kafka中是可以被多重订阅的,这就意味着一个主题可能有0个、一个、或者许多个消费者去订阅这个主题中的消息。
Partitions:在每一个topic在Kafka中可以有多个分区,增加一个主题的分区可以提高Kafka的吞吐率,但是不是越多越好,因为如果分区数量越多的话生产者插入的效率也会降低。所以真正到生产环境时,需要权衡生产与消费的一个平衡关系,消费稍微大于生产者,不会产生消息的堆积,也能够充分提高Kafka的效率。
Replication Factor:复制因子,是对于当前的Topic是否需要副本。如果设置成1的话,代表当前Topic在整个Kafka中只有一份。这里有个限制Topic的数量不能够多于当前Kafka的Broker数量。
存储方式:在Kafka的配置中(Server.properties)有logs.dir的配置,这个是Kafka存储消息的位置。如果Topic复制因子是1分区是1的话,在对应的文件夹下会有一个名称为topicname的文件夹;如果复制因子是2分区是2,假设存在两个Broker,在每个Broker中将会存在两个文件夹分别为topicname_0 topicname_1的文件夹
Leader与Follower:由于每个topic如果存在副本的话,是对于partition进行复制。这么多存在在不同的Broker上的副本,其中有一个partition是leader其他的是Followers,当一个broker宕机会在副本中选择一个充当Leader。
Producer生产者,顾明思议是生产消息,允许应用发布一个流的消息到一个或者多个主题中,
Consumer简介:消费者是订阅某个topic消息。
Group:每个消费者都有个groupid 来标定当前消费者属于哪个group。Group的作用是,当同一个group的两个消费者订阅一个topic的时候,如果当前topic没有分区那么其中一个消费者是获得不了任何消息的;如果有分区的话,将会按照数量进行负载均衡,每个消费者获得不同的分区的消息。
同一个Group下的消费者不会同时订阅一个主题下的同一个分区,如果消费者数量杜宇分区数量,则多出的消费者是不会有任何消息获得的。
BrokerBroker 是一个Kafka的Server,一台单物理机或者集群都可以拥有多个broker一个broker可以容纳多个主题,这个与复制因子、主题的分区都有关系。
Kafka单机配置,一个Broker 环境: 配置zookeeper下载
# zookeeper wget解压后进入目录
cd zookeeper-3.4.13/conf复制zookeeper的配置文件
cp zoo_sample.cfg zoo.cfg返回上级进入bin目录下,键入如下命令
./zkServer.sh start查看是否成功开启zookeeper服务
#注:这里提示一下开启后提示的成功不一定是真的成功,所以需要查看一下 netstat -tunlp|egrep 2181 # 如果没有结果查看统计目录下的 zookeeper.out文件 查看log信息 # 使用jps命令查看 QuorumPeerMain是zookeeper的守护进程 11089 QuorumPeerMain 11114 Jps 配置Kafka下载安装包
# Kafka wget解压后进入文件夹下bin目录下
# 第一个是start.sh位置第二个是server.rpoperties的位置,所以确认好路径的正确性 ./kafka-server-start.sh ./../config/server.properties & # 我们可以在Kafka的目录下直接执行,而不进入到bin下,命令看着更舒服些 ./bin/kafka-server-start.sh ./config/server.properties &查看是否开启成功:默认的Kafka端口是9092,zookeeper是2181
netstat -tunlp|egrep "(2181|9092)" # 结果如下 [root@localhost ~]# netstat -tunlp|egrep "(2181|9092)" tcp6 0 0 :::9092 :::* LISTEN 1877/Java tcp6 0 0 :::2181 :::* LISTEN 1820/java # jps 查看 11089 QuorumPeerMain 11458 Kafka 11847 Jps至此Kafka配置成功
使用Kafka 创建topic ./kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic test # 返回结果 Created topic "test" 在虚拟机用sh脚本上作为生产者生产消息我们重新开一个Xshell窗口,CD到Kafka目录/bin下,我们先介绍这一节会使用到的 kafka-console-producer.sh
# 键入如下命令 ./kafka-console-producer.sh --broker-list localhost:9092 --topic test >today message > # 最近本的指定,broker-list与topic是必须的参数 # 成功命令行会进入一个>的情况,键入消息按回车键就是发送消息到Kafka了 # 发送一个【today message】kafka-console-producer.sh参数说明,运行./kafka-console-producer.sh --help可查看
在虚拟机上用sh脚本作为消费者消费消息