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

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 {@Resourceprivate 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 {@Beanpublic NewTopic newTopic(){//设置副本个数不能为0,也不能大于节点个数,否则将不能创建Topicreturn 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.StringDeserializervalue-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 {@Resourceprivate EventProducer eventProducer;@Testvoid sendInterceptor(){eventProducer.sendEvent();}}

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 【MySQL-24】万字全面解析<索引>——【介绍&语法&性能分析&使用规则】
  • USER_CLOCK_ROOT
  • 解构赋值的理解
  • python办公自动化:使用`Python-PPTX`创建和操作表格
  • 数学建模学习(121):Python实现模糊AHP(Fuzzy AHP)——从原理到实践
  • JAVA_12
  • 一文搞懂Window、PhoneWindow、DercorView、WindowManage
  • C#计算模数转换器(ADC)的参数DNL、INL、SNR等
  • SQL Server Service Broker故障排除
  • InternVL 多模态模型部署微调实践
  • 骁龙CPU简介
  • Java-数据结构-时间和空间复杂度 (ಥ_ಥ)
  • 耦合和内聚
  • MySQL——多表操作(四)(2)带 EXISTS 关键字的子查询
  • 大数据分析与挖掘技术实训室解决方案
  • 【Leetcode】101. 对称二叉树
  • ES6指北【2】—— 箭头函数
  • “Material Design”设计规范在 ComponentOne For WinForm 的全新尝试!
  • 《Javascript高级程序设计 (第三版)》第五章 引用类型
  • 【407天】跃迁之路——程序员高效学习方法论探索系列(实验阶段164-2018.03.19)...
  • 【剑指offer】让抽象问题具体化
  • C++类的相互关联
  • CAP理论的例子讲解
  • Centos6.8 使用rpm安装mysql5.7
  • css布局,左右固定中间自适应实现
  • CSS中外联样式表代表的含义
  • echarts的各种常用效果展示
  • iOS高仿微信项目、阴影圆角渐变色效果、卡片动画、波浪动画、路由框架等源码...
  • LeetCode算法系列_0891_子序列宽度之和
  • Linux编程学习笔记 | Linux IO学习[1] - 文件IO
  • Material Design
  • mongo索引构建
  • open-falcon 开发笔记(一):从零开始搭建虚拟服务器和监测环境
  • puppeteer stop redirect 的正确姿势及 net::ERR_FAILED 的解决
  • Python_网络编程
  • python3 使用 asyncio 代替线程
  • QQ浏览器x5内核的兼容性问题
  • SpringBoot 实战 (三) | 配置文件详解
  • Tornado学习笔记(1)
  • 电商搜索引擎的架构设计和性能优化
  • 复习Javascript专题(四):js中的深浅拷贝
  • 基于Volley网络库实现加载多种网络图片(包括GIF动态图片、圆形图片、普通图片)...
  • 浏览器缓存机制分析
  • 你不可错过的前端面试题(一)
  • 一文看透浏览器架构
  • 原生Ajax
  • SAP CRM里Lead通过工作流自动创建Opportunity的原理讲解 ...
  • 进程与线程(三)——进程/线程间通信
  • 资深实践篇 | 基于Kubernetes 1.61的Kubernetes Scheduler 调度详解 ...
  • ​用户画像从0到100的构建思路
  • #100天计划# 2013年9月29日
  • (C11) 泛型表达式
  • (delphi11最新学习资料) Object Pascal 学习笔记---第13章第6节 (嵌套的Finally代码块)
  • (floyd+补集) poj 3275
  • (不用互三)AI绘画:科技赋能艺术的崭新时代