kafka java 性能测试_Kafka笔记整理(三):消费形式验证与性能测试

Kafka消费形式验证

前面的《Kafka笔记整理(一)》中有提到消费者的消费形式,说明如下:

1、每个consumer属于一个consumer group,可以指定组id。group.id2、消费形式:

组内:组内的消费者消费同一份数据;同时只能有一个consumer消费一个Topic中的1个partition;

一个consumer可以消费多个partitions中的消息。所以,对于一个topic,同一个group中推荐不能有多于

partitions个数的consumer同时消费,否则将意味着某些consumer将无法得到消息。

组间:每个消费组消费相同的数据,互不影响。3、在一个consumer多个线程的情况下,一个线程相当于一个消费者。

例如:partition为3,一个consumer起了3个线程消费,另一个后来的consumer就无法消费

下面就来验证Kafka的消费形式,不过需要说明的是,在消费者的程序代码中,可以指定消费者的group.id(我们下面将会在配置文件中指定)。

而在使用kafka的shell命令时,其实也是可以指定配置文件来指定消费者的group.id的,如果不指定,那么kafka将会随机生成一个group.id(kafka-console-consumer.sh中的kafka.tools.ConsoleConsumer类,如果没有指定group.id,其策略是随机生成)。

在后面的程序代码中,会使用同一group.id开启4个消费的线程(因为我们创建的topic有3个partition),然后在终端中通过kafka shell来开启另外一个消费者,进而达到验证kafka消费形式的目的。

另外,在测试中使用的topic如下:

$ kafka-topics.sh --describe hadoop --zookeeper uplooking01:2181,uplooking02:2181,uplooking03:2181Topic:hadoop PartitionCount:3 ReplicationFactor:3Configs:

Topic: hadoop Partition:0 Leader: 103 Replicas: 103,101,102 Isr: 103,101,102Topic: hadoop Partition:1 Leader: 101 Replicas: 101,102,103 Isr: 101,102,103Topic: hadoop Partition:2 Leader: 102 Replicas: 102,103,101 Isr: 102,103,101

即partition为3,副本因为也为3.

程序代码

KafkaProducerOps.java

package com.uplooking.bigdata.kafka.producer;

import com.uplooking.bigdata.kafka.constants.Constants;

import org.apache.kafka.clients.producer.KafkaProducer;

import org.apache.kafka.clients.producer.Producer;

import org.apache.kafka.clients.producer.ProducerRecord;

import java.io.IOException;

import java.io.InputStream;

import java.util.Properties;

import java.util.Random;/**

* 通过这个KafkaProducerOps向Kafka topic中生产相关的数据

*

* Producer*/

public classKafkaProducerOps {public static voidmain(String[] args) throws IOException {/**

* 专门加载配置文件

* 配置文件的格式:

* key=value

*

* 在代码中要尽量减少硬编码

* 不要将代码写死,要可配置化*/Properties properties= newProperties();

InputStreamin = KafkaProducerOps.class.getClassLoader().getResourceAsStream("producer.properties");

properties.load(in);/**

* 两个泛型参数

* 第一个泛型参数:指的就是kafka中一条记录key的类型

* 第二个泛型参数:指的就是kafka中一条记录value的类型*/String[] girls= new String[]{"姚慧莹", "刘向前", "周 新", "杨柳"};

Producer producer = new KafkaProducer(properties);

Random random= newRandom();int start = 1;for (int i = start; i <= start + 20; i++) {

String topic=properties.getProperty(Constants.KAFKA_PRODUCER_TOPIC);

String key= i + "";

String value= "今天的很美很美哦~";

ProducerRecord producerRecord =

new ProducerRecord(topic, key, value);

producer.send(producerRecord);

}

producer.close();

}

}

KafkaConsumerOps.java

package com.uplooking.bigdata.kafka.consumer;</

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值