大家好,欢迎来到IT知识分享网。
一、消息队列应用场景
应用场景:应用解耦、异步消息、流量削峰等问题,实现高性能、高可用、可伸缩和最终一致性架构。
Kafka是由LinkedIn开发的一个分布式的消息系统,可独立部署在单台服务器上,也可部署在多台服务器上构成集群。它提供了发布与订阅功能。用户可以发送数据到Kafka集群中,也可以从Kafka集群中读取数据。Kafka使用Scala编写,它以可水平扩展和高吞吐率而被广泛使用。
目前越来越多的开源分布式处理系统如Storm,Spark,Flink都支持与Kafka集成。现在我们的数据实时处理平台也使用到了kafka。现在它已被多家不同类型的公司作为多种类型的数据管道和消息系统使用。
访问Kafka技术专栏,了解更多的技术细节和项目代码。
二、Kafka消息的顺序性
在 Kafka 中,我们可以通过发送带有键的消息来实现这一目的。使用相同键发送的事件或消息都能保证正确的顺序,因为它们被发送到了相同的分区。
三、Kafka消息的消费者
我们使用 Spring Boot 来实现微服务,这些服务从 Kafka 主题读取数据。Spring Boot 提供了很棒的内置 Kafka 消费者,可以无缝消费,并提供了简便的注解(annotation),用于消费和反序列化数据。
除了专有的微服务消费者外,我们还有 CDC变更数据捕获工具,将数据索引到多种存储中,以便进行进一步的分析。其中包括用于关键字搜索的 Elasticsearch、用于审记的 Apache Hive,以及用于进一步下游处理的 Kafka。这些数据的内容可以直接来自 Kafka 消息,并使用 ID 字段作为主键,根据 TYPE 字段进行 CRUD 操作。
访问Spring Cloud Alibaba技术专栏,了解更多的技术细节和项目代码。
四、消息传递保证
在分布式系统中,保证一次仅一次消息传递并不是一件容易的事情,因为涉及的组件太多,太过复杂。消费者行为应该具有幂等性,以应对任何潜在的基础设施和生产者故障。
但即使应用程序是幂等的,也不应该为已处理过的消息进行重复繁重的计算。为了做到这一点,一种流行方法是通过分布式缓存(如Redis)来跟踪消息的 UUID,只要在到期时间间隔内遇到相同的 UUID,就不进行重复处理。
Flink 在内部使用 RocksDB 实现状态管理,使用键作为消息的 UUID,以此来实现只处理一次。如果你只想使用 Kafka,Kafka Streams 也提供了一种方法。基于 Spring Boot 的应用程序可以使用 Redis或EVCache 。
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/6404.html