消息中间件---Kafka

一、什么是Kafka?

Kafka是一个分布式流处理平台,类似于消息队列或企业消息传递系统;

流处理事什么呢?

流处理就是数据处理工作流,本质上是一种计算机编程范例。流处理是对接收到的新数据事件的连续处理。‌它涉及对从生产者到消费者的一系列事件进行处理。‌

流处理平台有哪些特性?

  1. 可以让你发布和订阅流式的记录。这一方面与消息队列或者企业消息系统类似。
  2. 可以储存流式的记录,并且有较好的容错性。
  3. 可以在流式记录产生时就进行处理。

二、kafka的特性

  • Kafka作为一个集群,运行在一台或者多台服务器上.
  • Kafka 通过 topic 对存储的流数据进行分类。
  • 每条记录中包含一个key,一个value和一个timestamp(时间戳)。

Kafka的组成

  1. 主题(topic):Kafka将消息分门别类,每一类的消息称之为一个主题(Topic),每个producer将消息发送到Kafka中都需要指明要存到哪个topic中就是表示这个消息属于哪一类;

  2. 分区(partition):每个 topic 都可以分成多个 partition,每个 partition 在存储层面是 append log 文件。任何发布到此 partition 的消息都会被直接追加到 log 文件的尾部。

  3. producer:发布消息的对象称之为主题生产者(Kafka topic producer)

  4. consumer:订阅消息并处理发布的消息的对象称之为主题消费者(consumers)

  5. broker:已发布的消息保存在一组服务器中,称之为Kafka集群。集群中的每一个服务器都是一个代理(Broker)。 消费者可以订阅一个或多个主题(topic),并从Broker拉数据,从而消费这些已发布的消息。

三、Kafka的架构设计

发布 - 订阅消息的工作流程

  • 生产者定期向主题发送消息。
  • Kafka 代理存储broker为该特定主题配置的分区中的所有消息。 它确保消息在分区之间平等共享。 如果生产者发送两个消息并且有两个分区,Kafka 将在第一分区中存储一个消息,在第二分区中存储第二消息。
  • 消费者订阅特定主题
  • 一旦消费者订阅主题,Kafka 将向消费者提供主题的当前偏移,并且还将偏移保存在 Zookeeper 系统中。
  • 消费者将定期请求 Kafka (如间隔100 Ms)新消息。
  • 一旦 Kafka 收到来自生产者的消息,它将这些消息转发给消费者。
  • 消费者将收到消息并进行处理。
  • 一旦消息被处理,消费者将向 Kafka 代理发送确认。
  • 一旦 Kafka 收到确认,它将偏移更改为新值,并在 Zookeeper 中更新它。 由于偏移在 Zookeeper 中维护,消费者可以正确地读取下一封邮件,即使在服务器暴力期间。
  • 以上流程将重复,直到消费者停止请求。
  • 消费者可以随时回退/跳到所需的主题偏移量,并阅读所有后续消息。

发布订阅模式

生产者将消息放入消息队列后,队列会将消息推送给订阅过该类消息的消费者。由于是消费者被动接收推送,所以无需感知消息队列是否有待消费的消息。

  • 生产者发送消息,多个消费者只能有一个消费者接收到消息
  • 生产者发送消息,多个消费者都可以接收到消息

kafka的应用场景

  • 日志收集:一个公司可以用Kafka收集各种服务的log,通过kafka以统一接口服务的方式开放给各种consumer,例如hadoop、Hbase、Solr等。
  • 消息系统:解耦和生产者和消费者、缓存消息等。
  • 用户活动跟踪:Kafka经常被用来记录web用户或者app用户的各种活动,如浏览网页、搜索、点击等活动,这些活动信息被各个服务器发布到kafka的topic中,然后订阅者通过订阅这些topic来做实时的监控分析,或者装载到hadoop、数据仓库中做离线分析和挖掘。

kafka的设计思想

  • 消息持久化:Kafka中会把消息持久化到本地文件系统中,并且保持极高的效率。
  • ush-and-pull :Kafka中的Producer和consumer采用的是push-and-pull模式,即Producer只管向broker push消息,consumer只管从broker pull消息,两者对消息的生产和消费是异步的。
  • 负载均衡方面: Kafka提供了一个 metadata API来管理broker之间的负载
  • 分区机制partition:Kafka的broker端支持消息分区,Producer可以决定把消息发到哪个分区,在一个分区中消息的顺序就是Producer发送消息的顺序,一个主题中可以有多个分区,具体分区的数量是可配置的。
  • 消息有效期:Kafka会长久保留其中的消息,以便consumer可以多次消费,当然其中很多细节是可配置的。
  • 批量发送:Kafka支持以消息集合为单位进行批量发送,以提高push效率。
  • 消息状态:在Kafka中,消息的状态被保存在consumer中,broker不会关心哪个消息被消费了被谁消费了,只记录一个offset值(指向partition中下一个要被消费的消息位置),这就意味着如果consumer处理不好的话,broker上的一个消息可能会被消费多次。
  • Kafka集群中broker之间的关系:不是主从关系,各个broker在集群中地位一样,我们可以随意的增加或删除任何一个broker节点。
  • 同步异步:Producer采用异步push方式,极大提高Kafka系统的吞吐率
相关推荐
qq_172805591 小时前
Kafka-Go学习
开发语言·学习·golang·kafka·go
程序员古德2 小时前
《论分布式存储系统架构设计》写作框架,软考高级系统架构设计师
分布式·系统架构
问道飞鱼2 小时前
分布式消息中间件kafka
分布式·kafka
武子康3 小时前
大数据-143 - ClickHouse 集群 SQL 超详细实践记录!
java·大数据·数据库·分布式·sql·clickhouse·flink
ACRELKY6 小时前
养殖场中的分布式光伏发电
分布式
好记忆不如烂笔头abc7 小时前
Kafka3.8.0+Centos7.9的安装参考
kafka
Su4iky7 小时前
(Python) Structured Streaming读取Kafka源实时处理图像
开发语言·python·kafka
bubble小拾15 小时前
Kafka日志索引详解与常见问题分析
分布式·kafka
杰信步迈入C++之路16 小时前
【RabbitMQ】RabbitMQ 概述
分布式·rabbitmq