Apache Kafka发展至今,已经是一个很成熟的消息队列组件了,也是大数据生态圈中不可或缺的一员。Apache Kafka社区非常的活跃,通过社区成员不断的贡献代码和迭代项目,使得Apache Kafka功能越发丰富、性能越发稳定,截止本篇博客Apache Kafka发布了V2.2.0版本。
那么,今天就来聊一聊Kafka应用实践与生态集成的相关内容。
2.如何知道Kafka是否适合你?项目立项时,会做技术调研,那么如何知道你选择的Kafka技术是否能够满足你?据Confluent公司调研报告可知,Apache Kafka在过去几年中在功能和覆盖范围方面取得了很大成就。它被财富500强中的三分之一用于生产,包括全球十大银行中的七家,十大保险公司中的八家,以及美国十大电信公司中的九家。接下来,为大家介绍Kafka示例来帮助大家了解常见的使用模式。并且希望大家能找到与自己的工作流程有交集的地方,这样大家就可以开始利用Kafka的强大功能了。
下面让先来看看Kafka提供的两个核心功能:
2.1 消息系统消息系统常见的两种模式:
队列:队列消费者充当了工作组的角色,每条消息记录只传递给一个工作进程,从而有效的划分工作流程;
发布与订阅:订阅者通常是彼此独立的,每个订阅者都可以获得每条消息的副本。
这两种模式都是有效和实用的,通过队列将工作内容分开,用于容错和扩展;发布与订阅能够允许多租户,来使系统解耦。而Apache Kafka的有点之一在于它将队列、发布与订阅结合到了一个强大的消息系统中。
2.2 流处理Apache Kafka拥有强大,可扩展的消息系统,只需要一种简单的方法来处理消息流。而在Kafka中,Stream API提供这一功能,它是一个Java客户端类库,提供比Producer和Consumer更高级别的抽象API。
这使得它使用起来非常的方便:
无状态操作,例如过滤和转换流消息;
有状态操作,例如时间窗口上的连接和聚合。
Stream API处理消息的序列化与反序列化,同时维护有状态操作所需要的状态。
2.3 典型的Kafka案例旅游行业:例如,在一个旅游网站,酒店和航班的价格是一直在变化的,系统的一些组件(价格告警、分析等)需要了解这些变化。你在Kafka的Topic上发布更改,并且需要通知的每个组件都充当一个消费者。每个消费者应用所组成的节点形成一个消费者组。给消费者组所消费的Topic的发送消息动态记录,这样每个消费者均可获取消息记录,同时每个消费者内能够有效的划分工作内容。
用户分析:页面查看、搜索、用户行为分析等,这些实际上是Kafka在LinkedIn设计的原始初衷。用户点击网站活动内容,每个活动类型均有一个Topic,可以实时的反馈,以便深入了解用户参与度、下载量、页面流量等。
GPS:例如,能够实时获取智能手机设备的位置数据,并且希望能够实时处理这些数据来显示车辆路径、行驶距离等。传入数据到Kafka的Topic中,并使用Stream API来进行处理。当需要在特定时间段内提取和处理给定用户的所有位置数据时,使用窗口进行状态处理会有不错的效果。
3.Kafka的内部存储工作原理是什么?如何你确定了Kafka技术适合你当前的项目,满足你的业务需求。你可能会很好奇,Kafka的内部存储工作原理是什么呢?接下来,将给大家分析Kafka是如何存储其数据的。
3.1 Kafka存储单元是分区Topic中的分区是有序写入的,且不可变的消息序列。分区不能跨多个Broker或者多个磁盘来进行分割。
3.2 保留策略来管理Topic中消息在你创建的Topic中,你可以指定保留多少数据或者保留多长时间的数据,然后Kafka会按照顺序来清除这些消息(不管消息是否有被使用)。
3.3 分区片段Kafka需要定期查找磁盘上待清除的数据,对于分区消息单个非常长的文件,该操作会很慢并且容易出错。为了解决这个问题,Kafka实行了分区分片策略。当Kafka将消息写入分区时,它会写入到一个片段,如果该片段到达阀值,则会新开一个新的片段来写入。片段以偏移量来命名,片段的偏移量是大于前一个片段的偏移量且小于或者等于当前片段中的偏移量。
3.4 片段日志是存储消息的位置