使用Kafka实现带消息记载的实时传输对话场景(谈天室) ...

打印 上一主题 下一主题

主题 582|帖子 582|积分 1746

使用Websocket可以实现客户端的双向通讯,客户端可以向服务端发送数据,服务端也可以向客户端发送数据。
传输内容是可以实时传输了,但是如果没有存储功能,一刷新页面(或者重新进入)就再也看不到之前发送的消息,这是一个很大的贫苦。
战略一(数据持久化)
首先想到在传输的时候,顺带将数据存入数据库,貌似这样也是一种可行的方案,但后果是每一次传输都要和数据库进行一次IO,性能低下,甚至有时候可能出现存入失败的环境,导致数据丢失。
战略二(消息队列)
是否能将消息持久化进消息队列呢,消息队列可以保证我们消息的次序性,可靠性,也有一些附带功能例如负载平衡、异步处理处罚、监控等。
优点无数,貌似很完善,实现一下看看效果就知道了~
消息队列选用Kafka
优点如下:

  • 高吞吐量:Kafka能够处理处罚大规模的数据流,每秒可以处理处罚数百万条消息,甚至更多。这种高吞吐量特性使其成为处理处罚大量数据的抱负选择,尤其适用于实时应用步调和日记网络场景。
  • 低耽误:Kafka具有低耽误特性,可以实现险些实时的数据传输和处理处罚。其耽误最低可以到达几毫秒,非常适用于必要快速响应和实时分析的应用。
  • 持久性和可靠性:Kafka消息被持久化到磁盘上,并通过多副本机制进行数据备份,确保数据不会丢失。这种持久性和可靠性使得Kafka适用于关键性的数据收罗和日记记载需求。
  • 分布式架构和程度扩展性:Kafka是分布式的,可以在多个节点上运行,并提供高可用性和容错性。通过添加更多的署理节点,可以轻松扩展Kafka集群的本领,以处理处罚更多的数据流。这种扩展性使其能够顺应快速增长的数据需求。
  • 多样的生产者和消费者支持:Kafka提供了多种编程语言的客户端库,允很多种差别范例的生产者和消费者与其集成,包括Java、Python、Go等。这种跨语言的支持使得Kafka能够广泛应用于各种技术栈。
  • 灵活的消息处理处罚模子:Kafka支持发布-订阅消息系统模子,允许消息被多个消费者订阅和使用。同时,它还支持消息的分区和消费者组,使得消息处理处罚更加灵活和高效。
具体采取的模式如下

开多个消费者组,一个消费者组只有一个消费者,也就意味着一个Topic有多个消费者组订阅。
由于Kafka的模式是一个Topic的消息只会不重复的给到一个消费者组,如果消费者组内有两名消费者,此中一名消费者消费了消息的话,另一名消费者无法重复消费此消息。
这样一来,我们只必要写一个接口往Topic发送消息,那么订阅的消费者们就可以实时收到消息了,就算消费者不在线,消息也会存储在Topic当中。
开始实现
新建springboot项目,引入pom

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

北冰洋以北

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表