上节说了kafka在linux环境下怎么搭建集群。这节写一下怎么在springcloud中以stream流方式去做kafka集群对接。

1.yml配置

#spring  Cloud  kafka    -- streams --
cloud:
stream:
kafka:
binder:
minPartitionCount: 3 # 分区数量,主要就是为了减轻单台服务器的压力,扩大并发量
brokers: 192.168.100.100:,192.168.100.101:,192.168.100.102: # kafka服务地址和端口
autoCreateTopics: true
autoAddPartitions: true

2.消息发送

@RestController
@RequestMapping("/kafka")
@EnableBinding(value = {WarningStreams.class})
public class kafkaTest { @Autowired
private MessageService messageService; /**
* 测试消息发送,入参就是你的topic,进行发送的时候就算kafka中没有该topic,他也会自动创建一个你传入的topic
* 这里面的Msg是我封装的一个消息对象,可以是随意的一个消息对象,字符串也可以
* @param topic
*/
@RequestMapping("/sendMsg")
public void sendMsg(String topic){
// 循环发送6次消息,分别发送在不同的分区
for (int i=; i<=; i++ ) {
Msg msg = new Msg();
msg.setData(null);
msg.setTaskId("");
msg.setMsg("测试消息发送");
msg.setMsgId(System.currentTimeMillis() + MathUtil.getFiveRandom());
msg.setSuccess("true");
msg.setCode("");
msg.setMsgType();
String result = messageService.sendControl(msg, topic);
System.out.println(result);
}
}
} messageService类:
@Service
public class MessageService {
private Logger logger = LoggerFactory.getLogger(getClass()); @Autowired
private BinderAwareChannelResolver resolver; /**
* 发送预警消息到指定topic,这里的topic是由平台编码+平台名称组成
* 若发现kafka中没有该topic,它会自动创建一个由平台编码+平台名称组成的topic
* @param warnings
* @param topic
* @return
*/
public String sendWarning(final Msg warnings, String topic) {
logger.info("Sending warnings {}", warnings); // 获取预警的topic,然后发送预警消息到kafka的topic
MessageChannel messageChannel = resolver.resolveDestination(topic);
messageChannel.send(MessageBuilder
.withPayload(warnings)
.setHeader(MessageHeaders.CONTENT_TYPE, MimeTypeUtils.APPLICATION_JSON)
.build()); return "send msg ok";
} /**
* 发送布控消息到指定topic,这里的topic是由平台编码+平台名称组成
* 若发现kafka中没有该topic,它会自动创建一个由平台编码+平台名称组成的topic
* @param msg
* @param topic
* @return
*/
public String sendControl(final Msg msg, String topic) {
logger.info("Sending controlMsg {}", JSON.toJSONString(msg));
// 获取布控的topic,然后发送布控消息到kafka的topic
MessageChannel messageChannel = resolver.resolveDestination(topic);
messageChannel.send(MessageBuilder
.withPayload(msg)
.setHeader(MessageHeaders.CONTENT_TYPE, MimeTypeUtils.APPLICATION_JSON)
.build()); return "send msg ok";
}
}

发送完毕后会在服务器中的topic下看到你传入的那个topic,并且会有三个分区,每个分区分别对应三台服务器并且每台服务器中会有两条消息,如下图:

 

3.消息接收

@RestController
@RequestMapping("/kafka")
@EnableBinding(value = {WarningStreams.class})
public class kafkaTest { /**
* 测试消息接收,接收对象用Object,否则收不到
* @param playLoad
*/
@StreamListener(WarningStreams.INPUT)
public void receive(Object playLoad) {
System.out.println("消息消费..result=="+ JSON.toJSONString(playLoad));
}
}
当消息被消费后,分区中的数据释放被清空,但是会保存在硬盘的log日志中。也就是在server.properties中你配置的log目录

springcloud+kafka集群的更多相关文章

  1. Kafka1 利用虚拟机搭建自己的Kafka集群

    前言:       上周末自己学习了一下Kafka,参考网上的文章,学习过程中还是比较顺利的,遇到的一些问题最终也都解决了,现在将学习的过程记录与此,供以后自己查阅,如果能帮助到其他人,自然是更好的. ...

  2. kafka集群安装部署

    kafka集群安装 使用的版本 系统:centos6.5 centos6.7 jdk:1.7.0_79 zookeeper:3.4.9 kafka:2.10-0.10.1.0 一.环境准备[只列,不具 ...

  3. ELK+Kafka集群日志分析系统

    ELK+Kafka集群分析系统部署 因为是自己本地写好的word文档复制进来的.格式有些出入还望体谅.如有错误请回复.谢谢! 一. 系统介绍 2 二. 版本说明 3 三. 服务部署 3 1) JDK部 ...

  4. kafka集群搭建和使用Java写kafka生产者消费者

    1 kafka集群搭建 1.zookeeper集群  搭建在110, 111,112 2.kafka使用3个节点110, 111,112 修改配置文件config/server.properties ...

  5. 搭建Kafka集群(3-broker)

    Apache Kafka是一个分布式消息发布订阅系统,而Kafka环境往往是在集群中配置的.本篇就对配置3个broker的Kafka集群进行介绍. Zookeeper集群 Kafka本身提供了启动了z ...

  6. Kafka集群的安装和使用

    Kafka是一种高吞吐量的分布式发布订阅的消息队列系统,原本开发自LinkedIn,用作LinkedIn的活动流(ActivityStream)和运营数据处理管道(Pipeline)的基础.现在它已被 ...

  7. Kafka【第一篇】Kafka集群搭建

    Kafka初识 1.Kafka使用背景 在我们大量使用分布式数据库.分布式计算集群的时候,是否会遇到这样的一些问题: 我们想分析下用户行为(pageviews),以便我们设计出更好的广告位 我想对用户 ...

  8. CentOS 7部署Kafka和Kafka集群

    CentOS 7部署Kafka和Kafka集群 注意事项 需要启动多个shell脚本交互客户端进行验证,运行中的客户端不要停止. 准备工作: 安装java并设置java环境变量,在`/etc/prof ...

  9. Kafka集群环境搭建

    Kafka是一个分布式.可分区.可复制的消息系统.Kafka将消息以topic为单位进行归纳:Kafka发布消息的程序称为producer,也叫生产者:Kafka预订topics并消费消息的程序称为c ...

随机推荐

  1. win+L键失灵了怎么办?

    win+L组合键是比较常用的锁屏快捷键组合,一直用的好好的今天发现突然失灵. 百度大部分方法是改注册表的值,然而对我来说没有用. 最后,才搜到一个帖子说是 win键被锁住了. [解决方法]: Fn+w ...

  2. npm start 的应用 改为forever 后台启动的方法记录

    记录日志的启动方式 forever start -l forever.log -o out.log -e err.log app.js 记录日志的启动方式 forever start -a app.j ...

  3. 使用Samba服务实现Linux与Windows系统之间的文件共享

    使用Samba服务口令验证方式可以让共享文件更加的安全,做到仅让信任的用户访问,而且验证过程也很简单,要想使用口令验证模式,我们需要先需要创建Samba服务独立的数据库. 第一步:安装Samba服务软 ...

  4. C语言程序设计100例之(6):数字反转

    例6    数字反转 题目描述 给定一个整数,请将该数各个位上数字反转得到一个新数.新数也应满足整数的常见形式,即除非给定的原数为零,否则反转后得到的新数的最高位数字不应为零(参见样例2). 输入格式 ...

  5. PHP 导出微信公众号粉丝的方法

    PHP 导出微信公众号粉丝的方法 先 user/get 获取关注者列表 然后user/info 根据openid读取信息 以上方法认证的订阅号支持

  6. Apache Jmeter进行服务器压力测试

    1.前言 最近项目遇到一个问题:其他公司对接我们系统,请求量太大的时候,返回单给对方就是丢失格式,大概十几万中总有那么十几单会出现格式错误! 所以我们老大就叫我用apache jmeter来进行并发测 ...

  7. C语言程序设计100例之(10):最大公约数

    例10        最大公约数 问题描述 有三个正整数a,b,c(0<a,b,c<10^6),其中c不等于b.若a和c的最大公约数为b,现已知a和b,求满足条件的最小的c. 输入数据 第 ...

  8. [WPF] Caliburn Micro学习三 Binding

    Caliburn Micro学习一 Installation Caliburn Micro学习二 Infrastructure 如果说WPF推崇的Binding开辟了一条UI开发新的方式——让写代码的 ...

  9. etcd-operator快速入门完全教程

    Operator是指一类基于Kubernetes自定义资源对象(CRD)和控制器(Controller)的云原生拓展服务,其中CRD定义了每个operator所创建和管理的自定义资源对象,Contro ...

  10. nyoj 20-吝啬的国度 (DFS)

    20-吝啬的国度 内存限制:64MB 时间限制:1000ms Special Judge: No accepted:12 submit:43 题目描述: 在一个吝啬的国度里有N个城市,这N个城市间只有 ...