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。

 

java 生产 kafka 多个topic kafka一个topic多个group_zookeeper

Kafka注册中心依赖于Zookeeper,基于scala,scala是基于JAVA环境的。所以还需要安装JDK,kafka-2.3.1自带了单节点的zookeeper,在入门学习阶段,可以用来玩玩。因为在实际环境中,zookeeper是一个集群。

下载Zookeeper之后,新建data和log文件夹:

java 生产 kafka 多个topic kafka一个topic多个group_数据_02

bin目录存放一些常用命令,conf存放着zookeeper的配置文件,打开conf目录,赋值一份zoo_sample.cfg文件,重命名为zoo.cfg。修改zoo.cfg配置:

java 生产 kafka 多个topic kafka一个topic多个group_zookeeper_03

修改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