java kafka spring_springboot整合kafka

为了方便起见安装zk集群和kafka集群我就不详细说明了,以下摘自https://www.cnblogs.com/lentoo/p/7785004.html,文章部分内容我做了修改,因为版本或者命令改变

一、简介

Kafka 是一个实现了分布式的、具有分区、以及复制的日志的一个服务。它通过一套独特的设计提供了消息系统中间件的功能。它是一种发布订阅功能的消息系统。

1、名词介绍

Message

消息,就是要发送的内容,一般包装成一个消息对象。

Topic

通俗来讲的话,就是放置“消息”的地方,也就是说消息投递的一个容器。假如把消息看作是信封的话,那么 Topic 就是一个邮箱

Partition && Log

Partition 分区,可以理解为一个逻辑上的分区,像是我们电脑的磁盘 C:, D:, E: 盘一样,

Kafka 为每个分区维护着一份日志Log文件。

Producers(生产者)

和其他消息队列一样,生产者通常都是消息的产生方。

在 Kafka 中它决定消息发送到指定Topic的哪个分区上。

Consumers(消费者)

消费者就是消息的使用者,在消费者端也有几个名词需要区分一下。

一般消息队列有两种模式的消费方式,分别是队列模式 和 订阅模式。

队列模式:一对一,就是一个消息只能被一个消费者消费,不能重复消费。一般情况队列支持存在多个消费者,但是对于一个消息,只会有一个消费者可以消费它。

订阅模式:一对多,一个消息可能被多次消费,消息生产者将消息发布到Topic中,只要是订阅改Topic的消费者都可以消费。

二、安装zookeeper

1、简介

Kafka使用zookeeper作为其分布式协调框架,很好的将消息生产、消息存储、消息消费的过程结合在一起。同时借助zookeeper,kafka能够生产者、消费者和broker在内的所以组件在无状态的情况下,建立起生产者和消费者的订阅关系,并实现生产者与消费者的负载均衡。

2、下载zookeeper

可以到zookeeper官网下载

3、配置zookeeper

(1)下载解压完成后,来到conf文件夹下,有一个 zoo_sample.cfg 官方默认的配置文件。复制一份,重命名为 zoo.cfg

(2)配置,打开zoo.cfg 修改配置信息

48304ba5e6f9fe08f3fa1abda7d326ab.png

#存储内存中数据库快照的位置,如果不设置参数,更新事务日志将被存储到默认位置。

dataDir=../zkData

#日志文件的位置

dataLogDir=../zkLog

#监听端口

clientPort=2181

48304ba5e6f9fe08f3fa1abda7d326ab.png

(3)集群配置

server.1=127.0.0.1:12888:1388

server.2=127.0.0.1:12889:1389

server.3=127.0.0.1:12887:1387

格式: server.A = B:C:D

A:是一个数字,表示第几号服务器

B:服务器IP地址

C:是一个端口号,用来集群成员的信息交换,表示这个服务器与集群中的leader服务器交换信息的端口

D:是在leader挂掉时专门用来进行选举leader所用的端口

完整的配置文件如下

9e0d407aa940daea04890b37e0afb6d6.png

复制两份zookeeper解压好配置后的文件夹,命名为

01c0007c8ff80d4e8b10e6a95781adf4.png

在对应的文件下下面修改zoo.cfg的监听端口地址

比如:

第一个zookeeper-3.4.6程序 修改zoo.cfg 配置文件

clientPort=2181

第二个zookeeper-3.4.6-2程序 修改zoo.cfg 配置文件

clientPort=2182

第三个zookeeper-3.4.6-2程序 修改zoo.cfg 配置文件

clientPort=2183

创建ServerID

在配置的dataDir目录下面新建一个 myid 文件,文件内容就是对应的id号,

比如:

zookeeper-3.4.6程序 myid 文件的内容 为 1

zookeeper-3.4.6-2程序 myid 文件的内容 为 2

zookeeper-3.4.6-3程序 myid 文件的内容 为 3

我这边配置的目录是

8c1a91994a1fdbbc459317c6117f06db.png

启动zookeeper

在对应的bin目录下启动

zkServer.cmd

以上zk的集群搭建没有问题,下面会有部分内容做修改

三、安装kafka

(1)下载

改为:

http://archive.apache.org/dist/kafka/2.0.0/kafka_2.12-2.0.0.tgz

(2)配置

解压后到config文件夹下 打开server.properties配置文件进行配置

(3)配置内容

修改或新增以下配置信息

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

#唯一标识

broker.id=0

#监听端口

port=9092

host.name=127.0.0.1

#消息最大大小

message.max.bytes=50485760

#配置副本数量

default.replication.factor=2

#获取的最大大小

replica.fetch.max.bytes=50485760

#队列中消息持久化存放的位置,可以多个目录,用逗号分开

log.dirs=/tmp/kafka-logs

#默认的分区数

num.partitions=2

#对应着刚刚配置的zookeeper的三个ip与端口地址

zookeeper.connect=127.0.0.1:2181,127.0.0.1:2182,127.0.0.1:2183

(4)集群配置

复制两份解压后的文件,命名如下

c7dc0d3d9ce0d87418e75afa2ab33e42.png

修改部分配置信息

在对应的server.properties中修改

#唯一标识

broker.id=0

broker.id=1

broker.id=2

#监听端口

port=9092

port=9093

port=9094

启动对应的kafka

进入到bin/windows目录下 启动kafka并指定配置文件

kafka-server-start.bat ../../config/server.properties

启动过程中如果遇到Kafka中错误:

Unrecognized VM option ‘UseCompressedOops’ Error: Clould not create the Java Vritual Machine. Error: A fatal exception has occurres . Program will exit.

解决方案:

找到bin/windows/kafka-run-class.bat 文件,

找到112行左右

IF ["%KAFKA_JVM_PERFORMANCE_OPTS%"] EQU [""] (

set KAFKA_JVM_PERFORMANCE_OPTS=-server -XX:+UseCompressedOops -XX:+UseParNewGC -XX:+UseConcMarkSweepGC -XX:+CMSClassUnloadingEnabled -XX:+CMSScavengeBeforeRemark -XX:+DisableExplicitGC -Djava.awt.headless=true

)

删除掉-XX:+UseCompressedOops 即可

测试集群

(1)创建一个 topic

kafka-topics.bat --create --zookeeper 127.0.0.1:2181 --replication-factor 1 --partitions 1 --topic test

(2)查看是否创建成功

kafka-topics.bat --list --zookeeper localhost:2181

(3)发送消息

kafka-console-producer.bat --broker-list localhost:9092 --topic test

This is a message

351d5b9dd1e726024668b769ecd9033e.png

(4)接收消息

kafka-console-consumer.bat --zookeeper localhost:2181 --topic test --from-beginning

94d0ae57d603869054e1f6d28a26f0c0.png

改为:

kafka-console-consumer.bat --

bootstrap-server 127.0.0.1:9092, 127.0.0.1:9093, 127.0.0.1:9094 --topic test --f

rom-beginning

不同客户端能接收到消息,说明配置成功

接下来为正式整合:

生产者:

引入jar包

org.springframework.kafka

spring-kafka

增加配置 spring:

kafka:

bootstrapServers: 127.0.0.1:9092, 127.0.0.1:9093, 127.0.0.1:9094

producer:

batchSize: 10

compressionType: snappy

acks: all

测试类,ps:上述文章中已经创建TOPIC。。。。test import org.junit.Test;

import org.junit.runner.RunWith;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.boot.test.context.SpringBootTest;

import org.springframework.kafka.core.KafkaTemplate;

import org.springframework.kafka.support.SendResult;

import org.springframework.test.context.junit4.SpringRunner;

import org.springframework.util.concurrent.ListenableFuture;

import org.springframework.util.concurrent.ListenableFutureCallback;

@RunWith(SpringRunner.class)

@SpringBootTest

public class KafkaApplicationTests {

@Autowired

private KafkaTemplate kafkaTemplate;

@Test

public void contextLoads() {

try {

ListenableFuture> future = kafkaTemplate.send("test","luoye", "hello kafka");

future.addCallback(new ListenableFutureCallback>() {

@Override

public void onSuccess(SendResult result) {

System.out.println(result.toString());

System.out.println("推送消息成功");

}

@Override

public void onFailure(Throwable throwable) {

System.out.println("推送消息失败");

}

});

} catch (Exception e) {

e.printStackTrace();

}

}

}

消费者:

引入jar包

org.springframework.kafka

spring-kafka

增加配置类 spring:

kafka:

consumer:

group-id: defaultGroup

bootstrap-servers: 127.0.0.1:9092, 127.0.0.1:9093, 127.0.0.1:9094

创建监听器 import org.apache.kafka.clients.consumer.ConsumerRecord;

import org.springframework.kafka.annotation.KafkaListener;

import org.springframework.stereotype.Component;

@Component

public class Listener {

@KafkaListener(topics = {"test"})

public void listen(ConsumerRecord, ?> record) {

System.out.println(record.key());

System.out.println(record.value());

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值