java检测kafka是否连接成功,Kafka 消费者失败检测

用于测试消费者故障检测的简单kafka客户端不提供预期的行为 . 我一定错过了什么 .

使用kafka版本0.10.1.0和使用java kafka-client 0.10.1.0的使用者进行测试 .

下课是平行两次午餐 . 正如所料,一个客户正在消费该组中的主题 . 但是如果使用kill -9杀死活跃的消费者,则该组不会重新 balancer 到其他消费者 .

public class BasicConsumer {

public BasicConsumer() {

// set up the consumer

Properties props = new Properties();

props.put("bootstrap.servers", "localhost:9092");

props.put("group.id", "test");

props.put("enable.auto.commit", "true");

props.put("auto.commit.interval.ms", "1000");

props.put("session.timeout.ms", "30000"); // half a minute timeout

props.put("max.poll.records", "10");

props.put("key.deserializer", "org.apache.kafka.common.serialization.StringDeserializer");

props.put("value.deserializer", "org.apache.kafka.common.serialization.StringDeserializer");

System.out.printf("Starting Consumer %n");

KafkaConsumer consumer = new KafkaConsumer<>(props);

consumer.subscribe(Arrays.asList("test1"));

LocalDateTime inFewMinutes = LocalDateTime.now().plusMinutes(10);

try {

while (LocalDateTime.now().isBefore(inFewMinutes)) {

ConsumerRecords records = consumer.poll(1000);

System.out.printf("%s Poll returned %d records%n", LocalDateTime.now(), records.count());

for (ConsumerRecord record : records) {

Map message = new Gson().fromJson(record.value(), Map.class);

Map data = (Map) message.get("data");

String msgId = (String) data.get("TRANSFER_ID");

System.out.printf("%s Handling record id %s with offset %s%n", LocalDateTime.now(), msgId, record.offset());

try {

Thread.sleep(10);

} catch (InterruptedException e) {

e.printStackTrace();

}

}

}

} finally {

consumer.close();

System.out.printf("Consumer closed cleanly...%n");

}

}

}

kafka和zookeeper服务器是简单的安装,无需对配置进行任何修改 .

提前感谢任何想法 .

late edition :问题已解决

为了杀死消费者,我停止了用于启动java客户端的 gradle run 命令 . 这实际上并没有阻止java进程......

正确杀死java进程表明,在日志中,被杀死的活动消费者与使用kafka进行的重新 balancer 之间会出现30秒的延迟,以便将手提供给第二个消费者 . 正如session.timeout.ms参数所预期的那样 .

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值