二进制的字节序列
消息传输协议
-
点对点模型
-
发布/订阅模型
Kafka与JMS的关系
JMS 是 Java Message Service,
它也是支持上面这两种消息引擎模型的。严格来说它并非传输协议而仅仅是一组 API 罢
了。不过可能是 JMS 太有名气以至于很多主流消息引擎系统都支持 JMS 规范,比如
ActiveMQ、RabbitMQ、IBM 的 WebSphere MQ 和 Apache Kafka。当然 Kafka 并未
完全遵照 JMS 规范,相反,它另辟蹊径,探索出了一条特有的道路。
- 怎么解决实时结果响应问题呢?比如秒杀商品,生产者产生订单,消费者处理订单结果,那这结果如何实时返回给用户呢?
这个场景使用Kafka Streams比较适合,它就是为read-process-write场景服务的
- 讲一讲Kafka和别的mq的区别和最佳选择方法么?例如什么时候选择RabbitMQ什么时候选择Kafka等等
RabbitMQ属于比较传统的消息队列系统,支持标准的消息队列协议(AMQP, STOMP,MQTT等),如果你的应用程序需要支持这些协议,那么还是使用RabbitMQ。另外RabbitMQ支持比较复杂的consumer Routing,这点也是Kafka不提供的。
- 有些业务用mq来做异步处理,为了削峰填谷,是不是上游发送消息成功就认为业务成功了,可能下游过很久去消费,那实时性要求很高的业务怎么办呢,比如生成了订单但是一直不处理也不好吧。mq和rpc调用的区别是什么呢?
实时性要求高的应该是同步的rpc,mq是异步的。
通常来说,两个进程进行数据流交互的方式一般有三种:
\1. 通过数据库:进程1写入数据库;进程2读取数据库
\2. 通过服务调用:比如REST或RPC,而HTTP协议通常就作为REST方式的底层通讯协议
\3. 通过消息传递的方式:进程1发送消息给名为broker的中间件,然后进程2从该broker中读取消息。消息传输协议属于这种模式
mq和rpc的区别往大了说属于数据流模式(dataflow mode)的问题。我们常见的数据流有三种:
-
通过数据库;
-
通过服务调用(REST/RPC);
-
通过异步消息传递(消息引擎,如Kafka)
RPC和MQ是有相似之处的,毕竟我们远程调用一个服务也可以看做是一个事件,但不同之处在于:
- MQ有自己的buffer,能够对抗过载(overloaded)和不可用场景
- MQ支持重试
- 允许发布/订阅模式
当然它们还有其他区别。应该这样说RPC是介于通过数据库和通过MQ之间的数据流模式。
- 用消息引擎的这种数据流数据方式,上游是不是就无法得知处理结果了,甚至是无法将返回值传回上游了?
因为这种通信方式一般是异步且是单向的,如果你需要这种回馈机制,最好使用服务调用 的方式
- 现在消息中间件很多,想要了解kafka和其他消息中间件的优劣点,系统选型时需要考虑什么?
如果是以实现高吞吐量为主要目标,Kafka是不错的首选;如果是以实现业务系统为主要目标,特别是金融类业务,可以考虑应用Kafka的流处理组件Kafka Streams。不过坦率说目前将Kafka应用于纯业务系统的并不多,但是前景依然可期:)
- 卡夫卡的消息超过了log.retention.bytes以后可以拒绝生产者的消息么,现在默认好像直接删除
最后
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Java工程师,想要提升技能,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。
因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,不论你是刚入门Java开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!
如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!**](https://bbs.csdn.net/topics/618164986)
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!