Kafka(三)概述


Apache Kafka是一个开源分布式事件流平台,被数千家公司用于高性能数据管道、流分析、数据集成和关键任务应用程序。
事件流(event streaming):从技术上讲,事件流是以事件流的形式从数据库、传感器、移动设备、云服务和软件应用程序等事件源实时捕获数据的做法;持久地存储这些事件流以供以后检索;实时地以及回顾性地操纵、处理和响应事件流;以及根据需要将事件流路由到不同的目的地技术。因此,事件流确保了数据的连续流动和解释,从而使正确的信息在正确的时间、正确的地点出现。

1 Kafka的应用场景

1.1 活动跟踪

收集客户互动和订单并立即做出反应,如零售、酒店和旅游业以及移动应用程序。
实时跟踪和监控汽车、卡车、车队和货运,如物流和汽车行业。

1.2 消息传递

连接、存储公司不同部门产生的数据并使其可用。
作为数据平台、事件驱动架构和微服务的基础。

1.3 指标和日志记录

持续捕获和分析来自物联网设备或其他设备(如工厂和风电场)的传感器数据。
监测医院护理中的患者并预测病情变化,以确保在紧急情况下及时治疗。

1.4 提交日志

复制数据库提交日志到远程系统。
合并数据库更新。
恢复系统。

1.5 流式处理

实时处理支付和金融交易,例如在证券交易所、银行和保险中。

2 Kafka与传统消息队列的区别

Kafka与传统消息队列在设计和使用方式上存在一些区别。下面是一些详细的解释:

  1. 存储方式
    传统消息队列:传统消息队列通常使用先进先出(FIFO)的方式存储消息。一旦消费者读取了消息,该消息就会从队列中删除。

    Kafka:Kafka使用一种持久化的方式来存储消息,消息被保存在磁盘上的主题日志中。消费者可以根据需要多次读取消息,而消息仍然保留在Kafka中,直到到达保留策略设置的时间或大小限制。

  2. 发布-订阅模型
    传统消息队列:传统消息队列通常使用发布-订阅模型,其中生产者将消息发布到特定的主题,而消费者订阅感兴趣的主题并接收消息。

    Kafka:Kafka也支持发布-订阅模型,其中生产者发布消息到特定的主题,但消费者可以以消费者组的形式订阅主题。Kafka将消息传递给每个消费者组中的一个消费者实例,从而实现消息的并行处理。

  3. 扩展性
    传统消息队列:在传统消息队列中,通常需要使用额外的中间件(如消息队列服务器)来实现扩展性。这些中间件负责管理消息的路由和传递。

    Kafka:Kafka本身就是为了高度可扩展性而设计的。它可以通过简单地添加新的服务器节点来扩展吞吐量和存储容量,而无需修改应用程序代码。Kafka使用分区和副本的概念来实现负载均衡和容错性。

  4. 消息保证
    传统消息队列:传统消息队列通常提供"至少一次"或"最多一次"消息传递语义。这意味着消息可能会重复传递,或者有时可能会丢失。

    Kafka:Kafka提供"至少一次"的消息传递保证。它使用了顺序写入和复制机制来确保消息的持久性和可靠性。此外,Kafka还允许开发者根据需求调整传递语义。

  5. 消息存储时间
    传统消息队列:在传统消息队列中,消息通常只能在有限的时间内存储,过期后将被删除。

    Kafka:Kafka的消息在存储上是持久化的,可以根据设置的保留策略(例如时间或大小限制)来保留消息一段时间。这使得Kafka非常适合构建可回放和事件溯源的系统。

总体而言,Kafka与传统消息队列相比具有更高的吞吐量、可扩展性和持久性。它采用持久化的方式存储消息,支持发布-订阅模型和消费者组的概念,同时提供了较强的消息传递保证。Kafka的设计目标是处理大规模的实时数据流,适用于构建可靠的、高吞吐量的分布式系统。

3 Kafka的核心概念

消息(message)

Kafka的数据单元称为消息

键(Key)

消息可以包含一个可选的元数据,就是。键被用于决定消息被分配到哪个分区,例如键的摘要值相同的消息存入同一个分区。

批次(Batch)

为了提高效率,消息会被分为批次写入Kafka。批次包含了一组属于同一个主题,同一个分区的消息。

模式(Schema)

对Kafka来说,不论任何消息都作为字节数组存储。但是对不同的应用程序来说,消息是有不同的格式的。所以需要在消息的处理过程中用消息模式来描述消息的格式。常见的模式有JSON,XML,AVRO等。

主题(Topic)

主题用来分类消息。

分区(Partion)

主题被非为若干个分区,一个分区就是一个提交日志。

  • 不同的分区可以部署在不同的服务器上。
  • 消息以追加的方式写入分区,已先进先出的方式读取。
  • 在主题范围内无法保证消息的顺序,在单个分区中可以。所以如果向严格保证消息的处理顺利,可以只使用一个分区,或者所有消息的键保持一致,获取自定义分区规则。

分区段(Segment)

一个分区又被分为多个段(segmnet),一个段就是一个日志文件。

分区副本(Replica)

一个分区可以被复制多分,并部署在不同的服务器上。实现数据的冗余和伸缩。

流(Stream)

是一组从生产者移动到消费者的数据。

生产者(Producer)

Kafka的客户端有两种类型:生产者和消费者。生产者创建消息。

消费者(Consumer)

消费者读取消息。消费者订阅不同的主题,并按照写入顺序读取。消费者通过偏移量来区分已经读取过的消息。

偏移量(Offset)

一种元数据,递增的长整形。Kafka写入消息时指定,并保存在一个内部主题(_consumer_offsets)中,保证消费者关闭后,读取状态不变。

消费者群组(Consumer Group)

一个消费者群组包含多个消费者,属于同一个群组的消费者共同读取一个主题时,Kafka能保证一个分区同时只被同一个消费者群组中的一个消费者读取。但是其他群组的消费者还可以读取这个分区。

中间人(Broker)

一个单独的Kafka服务器被称为broker。它接收生产者的消息,设置偏移量,并保存到磁盘;它同时响应消费者的请求,并返回已发布的消息。

集群(Cluster)

多个broker组成一个集群。

控制器(Cluster Controler)

每个集群都有一个broker充当控制器的角色,通过选举产生生。它的职责为:

  • 为broker分配分区
  • 监控broker

分区首领(Partition Leader)

一个分区从属于一个broker,称为分区首领

跟随者(Follower)

一个分区的其他副本被分配给不同的broker,这些broker被称为追随者

保留消息(Message Retaintion)

消息在Kafka中默认保留7天或者数据量达到1G。

紧凑型日志(Campact Log)

有些数据只需要保留最新的值,例如指标,所以可以把主题配置生紧凑型日志,只有最有一条指定键的消费会被保留下来。

多集群(Multiple Clusters)

使用多集群的原因:

  • 数据类型分离
  • 安全需求隔离
  • 多数据中心(灾难恢复)

Kafka提供了一个叫做MirrorMaker的数据镜像工具,用来在不同的集权之间同步数据。

ZooKeeper集群

Kafka使用ZooKeeper维护集权的成员信息,它起到了两个重要作用:

  1. 选举控制器
  2. 保存集群元数据:broker,配置,主题,分区,副本。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值