关于kafka

windows下启动kafka

空白处点击 shift右键打开命令窗口

之前斜杠方向错了  一直启动不了

bin\windows\zookeeper-server-start.bat config\zookeeper.properties

bin\windows\kafka-server-start.bat config\server.properties

linux下启动kafka

nohup  bin/zookeeper-server-start.sh config/zookeeper.properties > nohup.out 2>&1 &

nohup  bin/kafka-server-start.sh config/server.properties > nohupkafka.out 2>&1 &

查看kafka队列信息

bash bin/kafka-consumer-groups.sh --bootstrap-server 127.0.0.1:9092 --describe --group test-consumer-group

生产者发送消息

public static void send(KafkaMessage message) {
		String jsonData = JSONObject.toJSONString(message);
		@SuppressWarnings("unchecked")
		KafkaTemplate<String, String> kafkaTemplate = SpringUtil.getBean(KafkaTemplate.class);
		ListenableFuture<SendResult<String, String>> listenableFuture = kafkaTemplate.send(KafkaConst.KAFKA_TOPIC,
				jsonData);
		sendCallBack(listenableFuture);
	}

消费者消费消息

 @KafkaListener(topics = {KafkaConst.KAFKA_TOPIC_4,KafkaConst.KAFKA_TOPIC_1,KafkaConst.KAFKA_TOPIC_2,KafkaConst.KAFKA_TOPIC_3})
    public void listen(ConsumerRecord<?, ?> record) {
        System.err.println("kafka接收成功");
        Optional<?> kafkaMessage = Optional.ofNullable(record.value());
        if (kafkaMessage.isPresent()) {
            Object data = kafkaMessage.get();
            if (data != null && StringUtils.isNotBlank(String.valueOf(data))) {
                try {
                    String dataString = String.valueOf(data);
                    KafkaMessage message = JSONObject.parseObject(dataString, KafkaMessage.class);
                    KafkaMessageHeaderEnum kafkaMessageHeaderEnum = message.getMessageHeaderEnum();
                    if (kafkaMessageHeaderEnum != null) {
                        // 每个case里面最好不要写逻辑,直接写实现类
                        switch (kafkaMessageHeaderEnum) {
                            case ALERT:
                                Object messageData = message.getData();
                                if (messageData != null) {
                                    AlertKafkaSend alertKafkaSend = JSONObject.parseObject(String.valueOf(messageData),
                                            AlertKafkaSend.class);
                                    System.err.println(alertKafkaSend);
                                    alertKafkaConsumerService.send(alertKafkaSend);
                                }
                                break;

                            default:
                                break;
                        }
                    }
                } catch (Exception e) {
                    log.error("kafka报错!", e);
                }
            }
        }
    }

注解@KafkaListener

监听符合规则的topic 如@KafkaListener(topics = {KafkaConst.KAFKA_TOPIC_4,KafkaConst.KAFKA_TOPIC_1,KafkaConst.KAFKA_TOPIC_2,KafkaConst.KAFKA_TOPIC_3}) 一有符合规则的topic产生,就会执行被注解的方法

回调获得反馈lambda

成功就执行success  失败就执行failure

private static void sendCallBack(ListenableFuture<SendResult<String, String>> listenableFuture) {
		try {
			SendResult<String, String> sendResult = listenableFuture.get();
			listenableFuture.addCallback(SuccessCallback -> {
				log.info("kafka Producer发送消息成功!topic=" + sendResult.getRecordMetadata().topic() + ",partition"
						+ sendResult.getRecordMetadata().partition() + ",offset="
						+ sendResult.getRecordMetadata().offset());
			}, FailureCallback -> log.error(
					"kafka Producer发送消息失败!sendResult=" + JSONObject.toJSONString(sendResult.getProducerRecord())));
		} catch (Exception e) {
			log.error("获取producer返回值失败", e);
		}
	}

非lambda

ListenableFuture<SendResult<String, String>> listenableFuture = kafkaTemplate.send("topic", "partition","key","data");
//发送成功回调
SuccessCallback<SendResult<String, String>> successCallback = new SuccessCallback<SendResult<String, String>>() {
    @Override
    public void onSuccess(SendResult<String, String> result) {
       //成功业务逻辑
    }
}
//发送失败回调
FailureCallback failureCallback = new FailureCallback() {
    @Override
    public void onFailure(Throwable ex) {
        //失败业务逻辑
    }
}
listenableFuture.addCallback(successCallback, failureCallback);

kafkalinux安装包下载

https://download.csdn.net/download/qq_35653822/10906831

发布了50 篇原创文章 · 获赞 2 · 访问量 9444

猜你喜欢

转载自blog.csdn.net/qq_35653822/article/details/86151332