Kafka-为什么选择kafka(kafka的优点)
多个生产者
kafka可以无缝的支持多个生产者,不管客户端在使用单个主题还是多个主题。所以它很适合用来从多个前端系统手机数据,并以同一的格式对外提供数据。
例如:一个包含了多个微服务的网站,可以为页面视图创建一个单独的主题,所有服务都以相同的消息格式向该主题写入数据。消费者应用程序会获得统一的页面视图,而无需协调来自不同生产者的数据流。
多个消费者
kafka支持多个消费者从一个单独的消息流上读取数据,而且消费者之间互不影响。这与其他队列系统不同,其他队列系统的消息一旦被一个客户端读取,其他客户端就无法再读取它。
另外,多个消费者可以组成一个群组,它们共享一个消息流,并保证整个群组对每个给定的消息只处理一次。
基于磁盘的数据存储
kafka允许消费者非实时地读取消息,这要归功于kafka的数据保留特性。
消息被提交到磁盘,根据设置的保留规则进行保存。每个主题可以设置单独的保留规则,以便满足不同消费者的需求,各个主题可以保留不同数量的消息。
消费者可能会因为处理速度慢或突发的流量高峰导致无法及时读取消息,而持久化数据可以保证数据不会丢失。
消费者可以被关闭,但消息会继续保留在kafka里。消费者可以从上次中断的地方继续处理消息。
伸缩性
为了能够处理大量数据,kafka从一开始就被设计成一个具有灵活伸缩性的系统。
用户在开发阶段可以额先使用单个broker,再扩展到包含三个broker的小型开发集群,然后随着数据量不断增长,部署到生产环境的集群可能包含上百个broker。对在线集群进行扩展,丝毫不影响整体系统的可用性。一个包含多个broker的集群,即使个别broker失效,仍然可以持续地为客户提供服务。要提高集群的容错能力,需要配置较高的复制系数。
高性能
通过横向扩展生产者、消费者和broker,kafka可以轻松处理巨大的消息流。在处理大量数据的同时,它还能保证亚秒级的消息延迟。
使用场景
1.活动追踪
kafka最初的使用场景是跟踪用户的活动。网站用户与前端应用程序发生交互,前端应用程序生成用户活动相关的消息。这些消息可以是一些静态的信息,比如页面访问次数和点击量,也可以是一些复杂的操作,比如添加用户资料。这些消息被发布到一个或多个主题上,由后端应用程序负责读取。这样,我们就可以生成报告,为机器学习系统提供数据,更新搜索结果,或者实现其他更多功能。
2.传递消息
kafka的另一个基本用途是传递消息。应用程序向用户发送通知就是通过传递消息来实现的。
这些应用程序组件可以生成消息,而不需要关心消息的格式,也不需要关心消息时如何被发送的。一个公共应用程序会读取这些消息,对它们进行处理:
l 格式化消息
l 将多个消息放在同一个通知里发送
l 根据用户配资的首选项来发送数据
使用公共组件的好处在于,不需要在多个应用程序上开发重复的功能,而且可以再公共组件上做一些有趣的转换,比如把多个消息聚合成一个单独的通知,而这些工作是无法在其它地方完成的。
3.度量指标和日志记录
kafka也可以用于收集应用程序和系统度量指标以及日志。
应用程序定期把度量指标发布到kafka主题上,监控系统或告警系统读取这些消息。
kafka也可以用在像Hadoop这样的离线系统上,进行较长时间片段的数据分析,比如年度增长走势预测。
日志消息也可以被发布到kafka主题上,然后被路由到专门的日志搜索系统(比如ES)或安全分析应用程序。更改目标系统不会影响到前端应用或聚合方法。
4.提交日志
kafka的基本概念来源于提交日志,所以使用kafka作为提交日志是件顺理成章的事。我们可以把数据库的更新发布到kafka上,应用程序通过监控事件流来接收数据库的实时更新。这种变更日志流也可以用于把数据库的更新复制到远程系统上,或者合并多个应用程序的更新到一个单独的数据库视图上。数据持久化为变更日志提供了缓冲区,如果消费者应用程序发生故障,可以通过重放这些日志来恢复系统状态。
紧凑型日志主题只为每个键保留一个变更数据,所以可以长时间使用,不需要担心消息过期问题。
5.流处理
流处理是有一个能提供多种类型应用程序的领域。操作的是实时数据流,较小的时间片段,而Hadoop处理更长时间片段的数据,可能是几个小时或者几天,Hadoop会对这些数据进行批处理。
转自:
https://www.cnblogs.com/EnzoDin/p/12570882.html