Kafka官网:http://kafka.apache.org/
Producer:消息生产者,负责向Topic推送消息。broker接收到生产者发送的消息后,broker将该消息追加到当前用于追加数据的segment文件中。
Consumer:消息消费者,可以从一个或者多个Topic节点上获取消息。
Consumer Group:为一个或者多个Consumer进行分组。
Topic:消息队列,每条发布到Kafka集群的消息都有一个类别,这个类别被称为Topic。
Partition:一个Topic被拆分成一个或多个Partition(分区)。每个partition中的数据使用多个segment文件存储。partition中的数据是有序的,不同partition间的数据丢失了数据的顺序。如果topic有多个partition,消费数据时就不能保证数据的顺序。在需要严格保证消息的消费顺序的场景下,需要将partition数目设为1。
Broker:kafka集群包括一个或多个服务器,这些服务器节点被称作broker。
Leader:每个partition有多个副本,其中有且仅有一个作为Leader,Leader是当前负责数据的读写的partition。
Follower:Follower跟随一个Leader,Leader负责读写数据,并会通过广播同步到所有的Follower节点上。如果Leader宕机,那么将会从Follower中选举出一个新的Leader。当Follower挂掉,那么Leader则会将该Follower从ISR列表中删除并重新创建一个Follower。
Kafka注册中心依赖于Zookeeper,基于scala,scala是基于JAVA环境的。所以还需要安装JDK,kafka-2.3.1自带了单节点的zookeeper,在入门学习阶段,可以用来玩玩。因为在实际环境中,zookeeper是一个集群。
下载Zookeeper之后,新建data和log文件夹:
bin目录存放一些常用命令,conf存放着zookeeper的配置文件,打开conf目录,赋值一份zoo_sample.cfg文件,重命名为zoo.cfg。修改zoo.cfg配置:
修改dataDir和dataLogDir配置分别是刚刚创键的data和log文件夹路径,clientPort是zookeeper服务的端口
# data和log目录配置
dataDir=D:\\Users\\dagger\\IdeaProjects\\software\\zookeeper\\data
dataLogDir=D:\\Users\\dagger\\IdeaProjects\\software\\zookeeper\\log
# zookeeper默认端口
clientPort=2181
# zookeeper admin默认端口,可通过localhost:8080/commands访问
admin.serverPort=8888
在bin目录下运行zkServer.cmd启动zookeeper服务,如果是Linux,请运行zkServer.sh start。进入kafka目录,修改config/server.properties配置
# 每个broker都应该不一样
broker.id=0
# 监听本机9092端口
listeners=PLAINTEXT://:9092
# log目录
log.dirs=D:/Users/dagger/IdeaProjects/software/kafka/logs
# zookeeper连接地址
zookeeper.connect=localhost:
linux直接运行bin目录下的sh脚本,window环境需要进入window目录中运行bat脚本。启动kafka-server ./kafka-server-start.bat ../../config/server.properties
创建Topic, .\kafka-topics.bat --bootstrap-server localhost:9092 --create --replication-factor 1 --partitions 1 --topic test
--bootstrap-server:kafka-server服务地址
--create:创建命令
--replication-factor:副本数,保证消息的高可用
--partitions:Topic的分区数
--topic:指定主题
查看Topic详细信息, .\kafka-topics.bat --bootstrap-server localhost:9092 --describe test
Topic:test PartitionCount:1 ReplicationFactor:1 Configs:segment.bytes=1073741824
Topic: test Partition: 0 Leader: 0 Replicas: 0 Isr: 0
使用Producer向Topic中推送消息, ./kafka-console-producer.bat --broker-list localhost:9092 --topic test
--broker-list:节点集合,多个节点用逗号(,)分隔
使用Consumer从Topic中消费消息, .\kafka-console-consumer.bat --bootstrap-server localhost:9092 --topic test --from-beginning
--from-beginning:从Topic第0个位置开始拉取消息,忽略游标,拉取的是完整数据。
如果出现consumer接收不到producer发送的数据的问题,可能是server.properties配置有个配置没有打开。
listeners=PLAINTEXT://:9092