搭建什么的都不说了,先来熟悉一下基本操作
创建一个消息 replica为3, partition为3
1)启动zk(保证你自己的zookeeper已经启动了,这里我用的是kafka自带的zookeeper)
bin/zookeeper-server-start.sh config/zookeeper.properties 1>/dev/null 2>&1 &(后台运行)
2)启动kafka
bin/kafka-server-start.sh config/server.properties
4) 创建新的节点带三个副本:
bin/kafka-topics.sh --create --bootstrap-server localhost:9092 --replication-factor 3 --partitions 3 --topic cc1
bin/kafka-topics.sh --list --bootstrap-server localhost:9092
bin/kafka-topics.sh --describe --bootstrap-server localhost:9092 --topic cc1
5) 开始生产消息
bin/kafka-console-producer.sh --broker-list localhost:9092 --topic cc1
6) 消费消息(单节点的话就退出生产,然后再执行消费者代码,如果是已经搭好集群了,就另启一个客户端来进行消费)
bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --from-beginning --topic cc1
7)查看cc1这个消息
bin/kafka-topics.sh --describe --bootstrap-server localhost:9092 --topic cc1
接下来用Java代码实现生产者:
这个是流程图,这里说一下分区器的分区机制: kafka发送消息到broker之前要确定该消息的具体分区信息,kafka默认提供分区器。该分区机制如果在producer record中指定了key,那么将根据key的值进行hash计算,如果没有则采用轮询方式进行,除此之外,还可以在构造producer record的时候指定分区信息,kafka将优先使用指定的分区信息,避免进行计算提升了性能,但是客户端在指定分区信息的时候要考虑分区负载均衡的问题(这就叫数据偏移,所有数据在一个分区上,压力特别大)
先建好一个cc2,用来生产
生产者代码:
import java.util.Properties;
import org.apache.k