当前位置: 首页 > article >正文

kafak集群搭建-基于kRaft方式

kafak集群搭建-基于kRaft方式

  • 1、服务器规划
  • 2、kafka集群部署配置
    • 2.1、解压三个kafka
    • 2.2、配置/config/kraft/server.properties
  • 3、启动kafka集群
  • 4、SpringBoot集成kafka的kRaft集群
    • 4.1、消费者
    • 4.2、生产者
    • 4.3、配置类
    • 4.4、实体类
    • 4.5、JSON工具类
    • 4.6、项目配置文件
    • 4.7、测试类

在这里插入图片描述

1、服务器规划

在这里插入图片描述

2、kafka集群部署配置

至少需要三个节点

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

2.1、解压三个kafka

tar -zxvf kafka_2.13-3.7.0.tgz -C /usr/local/

2.2、配置/config/kraft/server.properties

其中马赛克处需要修改为你的服务器真实IP

配置第一台

在这里插入图片描述在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

配置第二台:在这里插入图片描述

在这里插入图片描述在这里插入图片描述
在这里插入图片描述

配置第三台:
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

3、启动kafka集群

在这里插入图片描述
1、生成Cluster UUID(集群UUID)

./kafka-storage.sh random-uuid

在这里插入图片描述

2、格式化日志目录

./kafka-storage.sh format -t UBLFE9CCRwauv0Mc3tU7qQ -c ../config/kraft/server.properties

在这里插入图片描述

3、启动kafka

//后台启动
./kafka-server-start.sh ../config/kraft/server.properties &

4、关闭kafka

./kafka-server-stop.sh ../config/kraft/server.properties

4、SpringBoot集成kafka的kRaft集群

在这里插入图片描述

4.1、消费者

package com.power.consumer;

import org.apache.kafka.clients.consumer.ConsumerRecord;
import org.springframework.kafka.annotation.KafkaListener;
import org.springframework.stereotype.Component;

@Component
public class EventConsumer {

    /**
     * topics 用于指定从哪个主题中消费消息
     * concurrency 用于指定有多少个消费者
     * @param record
     */
    @KafkaListener(topics = {"kraftClusterTopic"}, groupId = "kraftclusterGroup")
    public void onEventA(ConsumerRecord<String, String> record) {
        System.out.println(Thread.currentThread().getId()+"---> 消费消息 record = " + record);
    }
}

4.2、生产者

package com.power.producer;

import com.power.model.User;
import com.power.util.JSONUtils;
import org.springframework.kafka.core.KafkaTemplate;
import org.springframework.stereotype.Component;

import javax.annotation.Resource;
import java.util.Date;

@Component
public class EventProducer {

    @Resource
    private KafkaTemplate<String,Object> kafkaTemplate;

    public void sendEvent(){
        for (int i = 0; i < 2; i++) {
            User user = User.builder().id(i).phone("1567676767"+i).birthday(new Date()).build();
            String userJson = JSONUtils.toJSON(user);
            kafkaTemplate.send("kraftClusterTopic","k"+i, userJson);
        }
    }

}

4.3、配置类

package com.power.config;

import org.apache.kafka.clients.admin.NewTopic;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class KafkaConfig {

    @Bean
    public NewTopic newTopic(){
        //设置副本个数不能为0,也不能大于节点个数,否则将不能创建Topic
        return new NewTopic("kraftClusterTopic",2, (short)2);
    }
}

4.4、实体类

package com.power.model;

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.util.Date;

@Builder
@AllArgsConstructor
@NoArgsConstructor
@Data
public class User {

    private Integer id;

    private String phone;

    private Date birthday;

}

4.5、JSON工具类

package com.power.util;

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;

public class JSONUtils {

    private static final ObjectMapper OBJECTMAPPER = new ObjectMapper();

    public static String toJSON(Object object){
        try {
            return OBJECTMAPPER.writeValueAsString(object);
        } catch (JsonProcessingException e) {
            throw new RuntimeException(e);
        }
    }

    public static <T> T toBean(String json,Class<T> clazz){
        try {
            return OBJECTMAPPER.readValue(json,clazz);
        } catch (JsonProcessingException e) {
            throw new RuntimeException(e);
        }
    }
}

4.6、项目配置文件

spring:
  application:
    #应用名称
    name: spring-boot-08-kafka-kRaftCluster

  #kafka连接地址(ip+port)
  kafka:
    bootstrap-servers: <你的服务器IP>:9091,<你的服务器IP>:9092,<你的服务器IP>:9093

    #配置消费者的反序列化
    consumer:
      key-deserializer: org.apache.kafka.common.serialization.StringDeserializer
      value-deserializer: org.apache.kafka.common.serialization.StringDeserializer

4.7、测试类

package com.power;

import com.power.producer.EventProducer;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;

import javax.annotation.Resource;

@SpringBootTest
public class SpringBoot08KafkaBaseApplication {

    @Resource
    private EventProducer eventProducer;

    @Test
    void sendInterceptor(){
        eventProducer.sendEvent();
    }

}

http://www.kler.cn/news/283091.html

相关文章:

  • React Hooks的优势
  • 结合代码详细讲解DDPM的训练和采样过程
  • 【Java设计模式】Bridge模式:在Java中解耦抽象与实现
  • 2024年程序员金九银十面试宝典持续更新中.....
  • 线程池参数-SpringBoot配置线程池
  • Hadoop: Mapreduce了解
  • SpringBoot集成kafka-消费者批量消费消息
  • Kubernetes clusterIP的Service的域名解析响应是什么DNS记录类型?
  • Android adb shell查看手机user,user_root,user_debug版本
  • KubeSphere 宣布开源 Thanos 的企业级发行版 Whizard
  • 解锁 .NET 的异步与并行处理:高效编程的终极指南
  • 基于FreeRTOS的STM32多功能手表
  • Unity(2022.3.41LTS) - 图形,天空盒
  • 网络互联基础
  • Zookeeper官网Java示例代码解读(一)
  • cesium 发光线
  • 屏蔽swagger中的v2/api-docs和v3/api-docs防止恶意攻击
  • 基于Flask-REXTs创建一个项目接口并利用github上传部署
  • 【C#】【EXCEL】Bumblebee/Classes/ExWorksheet.cs
  • LVGL 控件之基础对象(lv_obj)
  • 宠物空气净化器和普通的空气净化器的区别在哪?吸毛除臭效果会更好吗
  • 在危机中磨砺前行:开发团队如何巧妙应对技术故障与挑战
  • 【dotnet】Ubuntu 24.04安装dotnet 8.0报错
  • SCI英文查重
  • SpringBoot-启动流程
  • 特种设备锅炉水处理题库及答案
  • 数字化干部管理方案:干部信息、干部档案、干部任免、干部监督、干部画像等一体化
  • 利用Selenium和XPath抓取JavaScript动态加载内容的实践案例
  • OpenCV杂项图像变换(1)自适应阈值处理函数adaptiveThreshold()的使用
  • WordPress入门级防火墙推荐指南