Kafka-的应用场景 (kafka是做什么的)
1. 日志处理与分析
Kafka 是处理和分析日志数据的理想选择。它可以从各种源(如应用程序、服务器和网络设备)高效地收集日志,并为进一步分析和可视化存储这些日志。 上图显示了典型的 ELK(Elastic-Logstash-Kibana)堆栈。Kafka 有效地从每个实例收集日志流。ElasticSearch 使用来自 Kafka 的日志并为其建立索引。Kibana 在 ElasticSearch 之上提供了搜索和可视化 UI。2. 推荐中的数据流
许多电子商务网站使用用户过去的行为和相似的用户来计算产品推荐。Kafka 在推荐系统中扮演着重要的角色,它可以传输原始点击流数据,供流处理引擎(如 Flink)处理。模型训练则使用来自数据湖的聚合数据。这使得能够持续改进每个用户的推荐的相关性。3. 系统监控与报警
与日志分析系统类似,我们需要收集系统指标以进行监控和故障排除。区别在于指标是结构化数据,而日志是非结构化文本。指标数据发送到 Kafka 并在 Flink 中聚合。聚合数据由实时监控仪表板和警报系统使用。4. CDC(变更数据捕获)
变更数据捕获 (CDC) 将数据库更改流式传输到其他系统以进行复制或缓存/索引更新。例如,在事务日志发送到 Kafka 并由 ElasticSearch 和辅助数据库获取。5. 系统迁移
升级遗留服务是一个挑战,因为它涉及旧的语言、复杂的逻辑和缺乏测试。我们可以利用消息传递中间件来降低风险。 在下图中,为了升级订单服务,我们更新旧的订单服务以使用来自 Kafka 的输入并将结果写入 ORDER 主题。新订单服务使用相同的输入并将结果写入 ORDERNEW 主题。调节服务比较 ORDER 和 ORDERNEW。如果它们相同,则新服务通过测试。6. 事件溯源
事件溯源就是捕获一系列事件中状态的变化。公司通常使用 Kafka 作为主要事件存储。如果发生任何故障、回滚或需要重建状态,您可以随时重新应用 Kafka 中的事件。7. 消息传递
Kafka 最好和最常见的用例之一是作为消息队列。Kafka 为您提供了一个可靠且可扩展的消息队列,可以处理大量数据。我们可以将您的消息组织成主题,这意味着您将每条消息发布到一个特定主题,而另一方面,消费者将订阅一个或多个主题并消费其中的消息。 微服务之间解耦通信的最大优点是,您可以随时向这些事件添加新服务,而无需增加系统的复杂性或不必更改任何源代码。8. 提交日志
Kafka 可以充当分布式系统的一种外部提交日志。日志有助于在节点之间复制数据,并充当故障节点恢复数据的重新同步机制。Kafka 中的日志压缩功能有助于支持这种用法。 Kafka 是一个功能强大且用途广泛的流处理平台,在许多行业和应用中得到广泛应用。它的高吞吐量、低延迟和可扩展性使其成为处理大量数据和建立可靠、可扩展的系统和服务的理想选择。Kafka的特性
Kafka的特性: - 高吞吐量、低延迟:kafka每秒可以处理几十万条消息,它的延迟最低只有几毫秒,每个topic可以分多个partition, consumer group 对partition进行consume操作。 - 可扩展性:kafka集群支持热扩展 - 持久性、可靠性:消息被持久化到本地磁盘,并且支持数据备份防止数据丢失 - 容错性:允许集群中节点失败(若副本数量为n,则允许n-1个节点失败) - 高并发:支持数千个客户端同时读写 1.2 Kafka的使用场景: - 日志收集:一个公司可以用Kafka可以收集各种服务的log,通过kafka以统一接口服务的方式开放给各种consumer,例如hadoop、Hbase、Solr等。 - 消息系统:解耦和生产者和消费者、缓存消息等。 - 用户活动跟踪:Kafka经常被用来记录web用户或者app用户的各种活动,如浏览网页、搜索、点击等活动,这些活动信息被各个服务器发布到kafka的topic中,然后订阅者通过订阅这些topic来做实时的监控分析,或者装载到hadoop、数据仓库中做离线分析和挖掘。 - 运营指标:Kafka也经常用来记录运营监控数据。 包括收集各种分布式应用的数据,生产各种操作的集中反馈,比如报警和报告。 - 流式处理:比如spark streaming和storm
kafka原理
Kafka 是一个消息系统,原本开发自 LinkedIn,用作 LinkedIn 的 活动流数据 (Activity Stream)和 运营数据 处理管道(Pipeline)的基础。现在它已被多家公司作为多种类型的数据管道和消息系统使用。
Kafka通常用于应用中的两种广播类型:
由此可见,kafka给自身的定位并不只是一个消息系统,而是通过发布订阅消息这种机制实现了流平台。
Kafka和大多数消息系统一样,搭建好kafka集群后,生产者向特定的topic生产消息,而消费者通过订阅topic,能够准实时的拉取到该topic新消息,进行消费。如下图:
kafka主要有以下特性:
尤其是高吞吐量,是他的最大卖点。kafka之所以能够实现高吞吐量,是基于他自身优良的设计,及集群的可扩展性。
Kafka应用场景
一个Topic可以认为是一类消息,每个topic将被分成多个partition(区),每个partition在存储层面是append log文件。任何发布到此partition的消息都会被直接追加到log文件的尾部,每条消息在文件中的位置称为offset(偏移量),offset为一个long型数字,它用来唯一标记某个分区内的一条消息。kafka并没有提供其它额外的索引机制来存储offset,因为在kafka中几乎不允许对消息进行“随机读写”。
Kafka和其它消息系统有一个不一样的设计,在consumer之上加了一层group。同一个group的consumer可以并行消费同一个topic的消息,但是同group的consumer,不会重复消费。这就好比多个consumer组成了一个团队,一起干活,当然干活的速度就上来了。group中的consumer是如何配合协调的,其实和topic的分区相关联,后面我们会详细论述。
如果同一个topic需要被多次消费,可以通过设立多个consumer group来实现。每个group分别消费,互不影响。
在kafka中,一个partition中的消息只会被group中的一个consumer消费(同一时刻),每个group中consumer消息消费互相独立,我们可以认为一个group是一个订阅者。一个Topic中的每个partions只会被一个订阅者中的一个consumer消费,不过一个consumer可以同时消费多个partitions中的消息。
kafka只能保证一个partition中的消息被某个consumer消费时是顺序的。事实上,从Topic角度来说,,当有多个partitions时,消息仍不是全局有序的。
免责声明:本文转载或采集自网络,版权归原作者所有。本网站刊发此文旨在传递更多信息,并不代表本网赞同其观点和对其真实性负责。如涉及版权、内容等问题,请联系本网,我们将在第一时间删除。同时,本网站不对所刊发内容的准确性、真实性、完整性、及时性、原创性等进行保证,请读者仅作参考,并请自行核实相关内容。对于因使用或依赖本文内容所产生的任何直接或间接损失,本网站不承担任何责任。