北冰洋以北 发表于 2024-8-11 08:50:34

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

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

[*]高吞吐量:Kafka能够处理处罚大规模的数据流,每秒可以处理处罚数百万条消息,甚至更多。这种高吞吐量特性使其成为处理处罚大量数据的抱负选择,尤其适用于实时应用步调和日记网络场景。
[*]低耽误:Kafka具有低耽误特性,可以实现险些实时的数据传输和处理处罚。其耽误最低可以到达几毫秒,非常适用于必要快速响应和实时分析的应用。
[*]持久性和可靠性:Kafka消息被持久化到磁盘上,并通过多副本机制进行数据备份,确保数据不会丢失。这种持久性和可靠性使得Kafka适用于关键性的数据收罗和日记记载需求。
[*]分布式架构和程度扩展性:Kafka是分布式的,可以在多个节点上运行,并提供高可用性和容错性。通过添加更多的署理节点,可以轻松扩展Kafka集群的本领,以处理处罚更多的数据流。这种扩展性使其能够顺应快速增长的数据需求。
[*]多样的生产者和消费者支持:Kafka提供了多种编程语言的客户端库,允很多种差别范例的生产者和消费者与其集成,包括Java、Python、Go等。这种跨语言的支持使得Kafka能够广泛应用于各种技术栈。
[*]灵活的消息处理处罚模子:Kafka支持发布-订阅消息系统模子,允许消息被多个消费者订阅和使用。同时,它还支持消息的分区和消费者组,使得消息处理处罚更加灵活和高效。
具体采取的模式如下
https://i-blog.csdnimg.cn/direct/0863da1a45264bdfaccdf393d355cf1a.png#pic_center
开多个消费者组,一个消费者组只有一个消费者,也就意味着一个Topic有多个消费者组订阅。
由于Kafka的模式是一个Topic的消息只会不重复的给到一个消费者组,如果消费者组内有两名消费者,此中一名消费者消费了消息的话,另一名消费者无法重复消费此消息。
这样一来,我们只必要写一个接口往Topic发送消息,那么订阅的消费者们就可以实时收到消息了,就算消费者不在线,消息也会存储在Topic当中。
开始实现
新建springboot项目,引入pom
页: [1]
查看完整版本: 使用Kafka实现带消息记载的实时传输对话场景(谈天室)