【KAFKA】Kafka集群搭建(安全认证SASL/PLAIN),并和springBoot整合

本文主要是介绍【KAFKA】Kafka集群搭建(安全认证SASL/PLAIN),并和springBoot整合,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Kafka集群搭建(安全认证SASL/PLAIN),并和springBoot整合

搭建三台机器的kafka集群。 用外置的zookeeper做配置中心管理。 为了不让配置中心也产生单点,所以我们需要先搭建一个三个节点的配置中心集群;

1 环境:

OS版本:        Centos7.4
kafka版本:    kafka_2.11-2.2.0
ZK版本:         zookeeper-3.4.14
JDK版本:         jdk_1.8

服务器列表(此处设置了域名):
192.168.0.85    gmg_server02
192.168.0.86    gmg_server03
192.168.0.90    gmg_server04

安装目录:
/home/programs/zookeeper
/home/programs/kafka
/home/programs/jdk

2 服务端设置

2.1 安装和配置zookeeper

请参照:https://blog.csdn.net/shgh_2004/article/details/89282066

2.2 安装和配置kafka

2.2.1 解压
tar -zxvf kafka_2.11-2.2.0.tgz -C /home/programs/kafka/
对于单机系统,解压好了即可直接运行zookeeper和kafka服务。

 2.2.2 修改配置文件
a) 配置kafka(server.properties)

vi conf/server.properties# 设置broker的唯一标识(集群唯一随便设置)。
broker.id=2 # 设置带SASL安全认证的服务监听(域名或者IP修改为机器的正式IP或者域名就好 其他照抄)
listeners=SASL_PLAINTEXT://gmg_server02:9092
security.inter.broker.protocol=SASL_PLAINTEXT
sasl.enabled.mechanisms=PLAIN
sasl.mechanism.inter.broker.protocol=PLAIN
authorizer.class.name=kafka.security.auth.SimpleAclAuthorizer
allow.everyone.if.no.acl.found=true# 设置log的目录 (这个在清理掉topic的时候会有用)
log.dirs=/home/programs/kafka/data/logs# 连接的zookeeper 集群地址列表
zookeeper.connect=gmg_server01:2181,gmg_server02:2181,gmg_server03:2181

b) 创建JAAS配置文件(kafka的认证账户信息)

定义链接Kafka Broker时所需要的用户名密码及broker各个节点之间相互通信的用户名密码,这部分配置定义在KafkaServer节,文件如下:

touch config/kafka_server_jaas.conf
KafkaServer {org.apache.kafka.common.security.plain.PlainLoginModule requiredusername="admin"password="admin-shiguanghui"user_admin="admin-shiguanghui";
};

c) 配置KAFKA_OPTS环境变量

为KAFKA_OPTS设置启动参数。
export KAFKA_HEAP_OPTS="-Xmx2G -Xms2G"
增加如下:
export KAFKA_HEAP_OPTS="-Xmx2G -Xms2G -Djava.security.auth.login.config=/home/programs/kafka/config/kafka_server_jaas.conf"

2.3 启动服务

首先启动zookeeper机器。 然后轮流启动kafka集群。
/home/programs/kafka/bin/kafka-server-start.sh -daemon /home/programs/kafka/config/server.properties


3 客户端设置

这里的没有做kafka自带客户端的设置,主要演示一下应用程序客户端的设置。 我们是使用springboot的应用客户端。

3.1 项目中引入依赖:

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency><groupId>org.springframework.kafka</groupId><artifactId>spring-kafka</artifactId>
</dependency>

3.2 在resources下面新建文件:kafka_client_jaas.conf

KafkaClient {org.apache.kafka.common.security.plain.PlainLoginModule requiredusername="admin"password="admin-shiguanghui";
};

3.3 application.yml的配置

spring:kafka:bootstrap-servers: gmg_server01:9092,gmg_server02:9092,gmg_server03:9092topic-name: test-topicconsumer:group-id: prd_group# earliest:当各分区下有已提交的offset时,从提交的offset开始消费;无提交的offset时,从头开始消费# latest:当各分区下有已提交的offset时,从提交的offset开始消费;无提交的offset时,消费新产生的该分区下的数据# none:topic各分区都存在已提交的offset时,从offset后开始消费;只要有一个分区不存在已提交的offset,则抛出异常auto-offset-reset: latestmax-poll-records: 100concurrency: 10# key/value的反序列化key-deserializer: org.apache.kafka.common.serialization.StringDeserializervalue-deserializer: org.apache.kafka.common.serialization.StringDeserializerproperties:sasl.mechanism: PLAINsecurity.protocol: SASL_PLAINTEXTconsumer-extra:# 是否批量处理batch-listener: trueproducer:# key/value的序列化key-serializer: org.apache.kafka.common.serialization.StringSerializervalue-serializer: org.apache.kafka.common.serialization.StringSerializerproperties:sasl.mechanism: PLAINsecurity.protocol: SASL_PLAINTEXT# 批量抓取batch-size: 4096# 缓存容量buffer-memory: 40960

3.5 程序启动类:

@SpringBootApplication
public class APIApplication extends SpringBootServletInitializer {static {// 这里可能会有坑。因为这种方式springboot无法读取jar包中配置文件。需要自行处理String config = ResourceUtils.getFile("classpath:kafka_client_jaas.conf").getAbsolutePath();System.setProperty("java.security.auth.login.config", config);}public static void main(String[] args) {SpringApplication.run(APIApplication.class, args);}
}

3.6 消息生产者

@Component
public class Sender {@Autowiredprivate KafkaTemplate<String, String> template;public void send(String msg) {this.template.sendDefault("test-msg", msg);System.out.println("发送消息:" + msg);}
}

3.6 消息消费者

@Component
public class Receiver {@KafkaListener(topics = {${spring.kafka.consumer.topic-name}}, groupId = "${spring.kafka.consumer.group-id}")public void receiveMessage(ConsumerRecord<String, String> record) {System.out.println("接收消息key = " + record.key() + "、value = " + record.value());}
}


3.7 controller 

@RestController
public class KafkaController {@Autowiredprivate Sender sender;@PostMapping("/{msg}")public String send(@PathVariable("msg") String msg) {sender.send(msg);return msg;}
}

 

这篇关于【KAFKA】Kafka集群搭建(安全认证SASL/PLAIN),并和springBoot整合的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/448148

相关文章

Java中流式并行操作parallelStream的原理和使用方法

《Java中流式并行操作parallelStream的原理和使用方法》本文详细介绍了Java中的并行流(parallelStream)的原理、正确使用方法以及在实际业务中的应用案例,并指出在使用并行流... 目录Java中流式并行操作parallelStream0. 问题的产生1. 什么是parallelS

Java中Redisson 的原理深度解析

《Java中Redisson的原理深度解析》Redisson是一个高性能的Redis客户端,它通过将Redis数据结构映射为Java对象和分布式对象,实现了在Java应用中方便地使用Redis,本文... 目录前言一、核心设计理念二、核心架构与通信层1. 基于 Netty 的异步非阻塞通信2. 编解码器三、

SpringBoot基于注解实现数据库字段回填的完整方案

《SpringBoot基于注解实现数据库字段回填的完整方案》这篇文章主要为大家详细介绍了SpringBoot如何基于注解实现数据库字段回填的相关方法,文中的示例代码讲解详细,感兴趣的小伙伴可以了解... 目录数据库表pom.XMLRelationFieldRelationFieldMapping基础的一些代

一篇文章彻底搞懂macOS如何决定java环境

《一篇文章彻底搞懂macOS如何决定java环境》MacOS作为一个功能强大的操作系统,为开发者提供了丰富的开发工具和框架,下面:本文主要介绍macOS如何决定java环境的相关资料,文中通过代码... 目录方法一:使用 which命令方法二:使用 Java_home工具(Apple 官方推荐)那问题来了,

Java HashMap的底层实现原理深度解析

《JavaHashMap的底层实现原理深度解析》HashMap基于数组+链表+红黑树结构,通过哈希算法和扩容机制优化性能,负载因子与树化阈值平衡效率,是Java开发必备的高效数据结构,本文给大家介绍... 目录一、概述:HashMap的宏观结构二、核心数据结构解析1. 数组(桶数组)2. 链表节点(Node

Java AOP面向切面编程的概念和实现方式

《JavaAOP面向切面编程的概念和实现方式》AOP是面向切面编程,通过动态代理将横切关注点(如日志、事务)与核心业务逻辑分离,提升代码复用性和可维护性,本文给大家介绍JavaAOP面向切面编程的概... 目录一、AOP 是什么?二、AOP 的核心概念与实现方式核心概念实现方式三、Spring AOP 的关

详解SpringBoot+Ehcache使用示例

《详解SpringBoot+Ehcache使用示例》本文介绍了SpringBoot中配置Ehcache、自定义get/set方式,并实际使用缓存的过程,文中通过示例代码介绍的非常详细,对大家的学习或者... 目录摘要概念内存与磁盘持久化存储:配置灵活性:编码示例引入依赖:配置ehcache.XML文件:配置

Java 虚拟线程的创建与使用深度解析

《Java虚拟线程的创建与使用深度解析》虚拟线程是Java19中以预览特性形式引入,Java21起正式发布的轻量级线程,本文给大家介绍Java虚拟线程的创建与使用,感兴趣的朋友一起看看吧... 目录一、虚拟线程简介1.1 什么是虚拟线程?1.2 为什么需要虚拟线程?二、虚拟线程与平台线程对比代码对比示例:三

vite搭建vue3项目的搭建步骤

《vite搭建vue3项目的搭建步骤》本文主要介绍了vite搭建vue3项目的搭建步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学... 目录1.确保Nodejs环境2.使用vite-cli工具3.进入项目安装依赖1.确保Nodejs环境

Nginx搭建前端本地预览环境的完整步骤教学

《Nginx搭建前端本地预览环境的完整步骤教学》这篇文章主要为大家详细介绍了Nginx搭建前端本地预览环境的完整步骤教学,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录项目目录结构核心配置文件:nginx.conf脚本化操作:nginx.shnpm 脚本集成总结:对前端的意义很多