原文地址:blog.csdn.net/hesqlplus73…
1. 下载kafka,版本大于2.8.0时,kafka不依赖zookeeper
kafka.apache.org/ 官网下载对应kafka_2.12-3.0.0.tgz
2. 上传到服务器并解压
tar -zxvf kafka_2.12-3.0.0.tgz
3. 新建config/kafka_server_jaas.conf
cd kafka_2.12-3.0.0/config
vim kafka_server_jaas.conf
内容如下:末尾的分号不能少
KafkaServer {
org.apache.kafka.common.security.plain.PlainLoginModule required
serviceName="kafka"
username="admin"
password="admin"
user_admin="admin";
};
4. 拷贝kraft/server.properties命名为server-sasl.properties
cd kraft
cp server.properties server-sasl.properties
修改server-sasl.properties内容:(不修改的不显示)
controller.quorum.voters=1@localhost:9093
listeners=SASL_PLAINTEXT://:9092,CONTROLLER://:9093
inter.broker.listener.name=SASL_PLAINTEXT
advertised.listeners=SASL_PLAINTEXT://虚拟机ip:9092
sasl.enabled.mechanisms=PLAIN
sasl.mechanism.inter.broker.protocol=PLAIN
5. 拷贝bin/kafka-server-start.sh命名为kafka-server-start-sasl.sh
cd ../../bin
cp kafka-server-start.sh kafka-server-start-sasl.sh
在KAFKA_HEAP_OPTS后面加入kafka_server_jaas.conf的路径
export KAFKA_HEAP_OPTS="-Xmx1G -Xms1G -Djava.security.auth.login.config=/opt/kafka/kafka_2.12-3.0.0/config/kafka_server_jaas.conf"
6. 回到安装的根目录下(kafka_2.12-3.0.0)启动
sh ./bin/kafka-server-start-sasl.sh ./config/kraft/server-sasl.properties
7. springboot连接
7.1 添加kafka依赖,注意springboot和kafka之间的版本对应关系
<dependency>
<groupId>org.springframework.kafka</groupId>
<artifactId>spring-kafka</artifactId>
</dependency>
7.2 kafka相关配置,如果上面安装kafka时修改了admin的密码这里需要改成对应的密码
spring:
kafka:
# 指定kafka 代理地址,多个地址用英文逗号隔开
bootstrap-servers: 虚拟机ip:9092
#初始化生产者配置
producer:
#消息重发次数,如果配置了事务,则不能为0,改为1
retries: 0
# 每次批量发送消息的数量
batch-size: 16384
#生产者最大可发送的消息大小,内有多个batch,一旦满了,只有发送到kafka后才能空出位置,否则阻塞接收新消息
buffer-memory: 33554432
# 指定消息key和消息体的编解码方式
key-serializer: org.apache.kafka.common.serialization.StringSerializer
value-serializer: org.apache.kafka.common.serialization.StringSerializer
#确认等级ack,kafka生产端最重要的选项,如果配置了事务,那必须是-1或者all
#acks=0,生产者在成功写入消息之前不会等待任何来自服务器的响应
#acks=1,只要集群的首领节点收到消息,生产者就会收到一个来自服务器成功响应
#acks=-1,表示分区leader必须等待消息被成功写入到所有的ISR副本(同步副本)中才认为product请求成功。这种方案提供最高的消息持久性保证,但是理论上吞吐率也是最差的
acks: all
#配置事务,名字随便起
#transaction-id-prefix: hbz-transaction-
properties:
sasl.mechanism: PLAIN
security.protocol: SASL_PLAINTEXT
sasl.jaas.config: org.apache.kafka.common.security.plain.PlainLoginModule required username="admin" password="admin";
#初始化消费者配置
consumer:
# 指定默认消费者group id,消费者监听到的也是这个
group-id: cssmx
#消费者在读取一个没有offset的分区或者offset无效时的策略,默认earliest是从头读,latest不是从头读
auto-offset-reset: latest
#是否自动提交偏移量offset,默认为true,一般是false,如果为false,则auto-commit-interval属性就会无效
enable-auto-commit: true
#自动提交间隔时间,接收到消息后多久会提交offset,前提需要开启自动提交,也就是enable-auto-commit设置为true,默认单位是毫秒(ms),如果写10s,最后加载的显示值为10000ms,需要符合特定时间格式:1000ms,1S,1M,1H,1D(毫秒,秒,分,小时,天)
auto-commit-interval: 1000
# 指定消息key和消息体的编解码方式
key-serializer: org.apache.kafka.common.serialization.StringDeserializer
value-serializer: org.apache.kafka.common.serialization.StringDeserializer
#批量消费每次最多消费多少条信息
max-poll-records: 100
properties:
sasl.mechanism: PLAIN
security.protocol: SASL_PLAINTEXT
sasl.jaas.config: org.apache.kafka.common.security.plain.PlainLoginModule required username="admin" password="admin";
#监听器设置
listener:
#消费端监听的topic不存在时,项目启动会报错(关掉)
missing-topics-fatal: false
#设置消费类型 批量消费batch,单条消费single
type: batch
#指定容器的线程数,提高并发量,默认为1
#concurrency: 3
#手动提交偏移量,当enable-auto-commit为true自动提交时,不需要设置改属性
#ack-mode: manual