springcloud+kafka集群
上节说了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集群的更多相关文章
- Kafka1 利用虚拟机搭建自己的Kafka集群
前言: 上周末自己学习了一下Kafka,参考网上的文章,学习过程中还是比较顺利的,遇到的一些问题最终也都解决了,现在将学习的过程记录与此,供以后自己查阅,如果能帮助到其他人,自然是更好的. ...
- kafka集群安装部署
kafka集群安装 使用的版本 系统:centos6.5 centos6.7 jdk:1.7.0_79 zookeeper:3.4.9 kafka:2.10-0.10.1.0 一.环境准备[只列,不具 ...
- ELK+Kafka集群日志分析系统
ELK+Kafka集群分析系统部署 因为是自己本地写好的word文档复制进来的.格式有些出入还望体谅.如有错误请回复.谢谢! 一. 系统介绍 2 二. 版本说明 3 三. 服务部署 3 1) JDK部 ...
- kafka集群搭建和使用Java写kafka生产者消费者
1 kafka集群搭建 1.zookeeper集群 搭建在110, 111,112 2.kafka使用3个节点110, 111,112 修改配置文件config/server.properties ...
- 搭建Kafka集群(3-broker)
Apache Kafka是一个分布式消息发布订阅系统,而Kafka环境往往是在集群中配置的.本篇就对配置3个broker的Kafka集群进行介绍. Zookeeper集群 Kafka本身提供了启动了z ...
- Kafka集群的安装和使用
Kafka是一种高吞吐量的分布式发布订阅的消息队列系统,原本开发自LinkedIn,用作LinkedIn的活动流(ActivityStream)和运营数据处理管道(Pipeline)的基础.现在它已被 ...
- Kafka【第一篇】Kafka集群搭建
Kafka初识 1.Kafka使用背景 在我们大量使用分布式数据库.分布式计算集群的时候,是否会遇到这样的一些问题: 我们想分析下用户行为(pageviews),以便我们设计出更好的广告位 我想对用户 ...
- CentOS 7部署Kafka和Kafka集群
CentOS 7部署Kafka和Kafka集群 注意事项 需要启动多个shell脚本交互客户端进行验证,运行中的客户端不要停止. 准备工作: 安装java并设置java环境变量,在`/etc/prof ...
- Kafka集群环境搭建
Kafka是一个分布式.可分区.可复制的消息系统.Kafka将消息以topic为单位进行归纳:Kafka发布消息的程序称为producer,也叫生产者:Kafka预订topics并消费消息的程序称为c ...
随机推荐
- csps模拟测试50反思
又考崩了,T1一眼秒掉错误思路,然后迅速码完,并码完错误暴力,对拍拍上,以为AC.T2想到了二维莫队,发现是子任务就没去打,一直在想别的,T3最后想到60分打法,没有打完,也没时间暴力,挂掉.T2还有 ...
- c#数据结构之Array、ArrayList、List、LinkedList对比分析
一.前言: 在c#数据结构中,集合的应用非常广泛,无论是做BS架构还是CS架构开发,都离不开集合的使用,比如我们常见的集合包括:Array.ArrayList.List.LinkedList等.这一些 ...
- MySQL每个分类的前几条记录
MySQL 获取所有分类和每个分类的前几条记录 比如有文章表 Article(Id,Category,InsertDate) 现在要用SQL找出每种类型中时间最新的前N个数据组成的集合 SELECT ...
- 【科创人·独家】MegaEase左耳朵耗子陈皓复盘创业:第一年盈利被当骗子,线下广阔天地大有可为
[科创人·独家]MegaEase左耳朵耗子陈皓复盘创业:第一年盈利被当骗子,线下广阔天地大有可为 原创: babayage CTO科创圈 与上百位科技创业者共同关注科创人的成长心路. 文末有彩蛋:& ...
- js的split()和join()的用法
split() 方法用于把一个字符串分割成字符串数组.split[splɪt]:vt. 分离:使分离:劈开:离开:分解 stringObject.split(separator,howmany) se ...
- hdu 1028 Sample Ignatius and the Princess III (母函数)
Ignatius and the Princess III Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K ...
- nyoj 67-三角形面积 (海伦公式, 叉积)
67-三角形面积 内存限制:64MB 时间限制:3000ms 特判: No 通过数:8 提交数:13 难度:2 题目描述: 给你三个点,表示一个三角形的三个顶点,现你的任务是求出该三角形的面积 输入描 ...
- 【前端VUE】【后端SSM】 记录一次多条件查询状态下加载极慢的解决思路和解决方案
最近在开发一个Online Judge系统,其中有一个“挑战模式”模块,如图所示 由于是第一次使用ECharts做开发,所以完成整个模块的过程也是边写边学了,记录一下问题: 遇到的问题:在最开始进行测 ...
- 力扣(LeetCode)位1的个数 个人题解
编写一个函数,输入是一个无符号整数,返回其二进制表达式中数字位数为 ‘1’ 的个数(也被称为汉明重量). 示例 1: 输入:00000000000000000000000000001011 输出:3 ...
- shell脚本0——”一切皆文件“, 认识Shell
一.”一切皆文件“与“管道” 1)管道:grep foo /path/to/file | grep -n -k 3 | more 实际过程与我们直观认为的相反,最好通过实际过程理解.首先运行的是mor ...