1.启动zookeeper及Kafka:
cd /usr/kafka
bin/zookeeper-server-start.sh config/zookeeper.properties
bin/kafka-server-start.sh config/server.properties
2. 编写Producer:
acks:-1代表所有broker都收到消息了,leader再返回响应
retries:代表错误重试次数
batch.size:代表一批消息的大小
linger.ms:代表每10ms即使batch未满也发送消息
buffer.memory:缓冲区大小
max.block.ms:缓冲区满后阻塞3s
3.编写Consumer:
ConsumerRunnable:
ConsumerGroup:
主类:
设置3个线程轮询
4.运行测试:
问题1:报错:
根据错误信息,是Listener设置错误,导致消息发送失败
修改server.properties:
取消listeners一行注释,并修改成listeners=PLAINTEXT://localhost:9092
重启kafka,重新运行,发送成功
问题2:只有Thread-1收到消息,且分区全部为0,使用jconsole看到确实启动了三个线程,并且全部处于RUNNABLE
原因:没有配置分区,或者没有为producer配置分区机制
运行命令:
bin/kafka-topics.sh --zookeeper localhost:2181 --alter --partitions 20 --topic test
设置分区数量
在Producer中添加分区器:
properties.put("partitioner.class","org.apache.kafka.clients.producer.internals.DefaultPartitioner");
除此之外不需要任何修改,重新运行