Kafka (一) 概述

消息系统使用场景:

解耦:各系统之间通过消息系统统一交换数据,无须了解彼此的存在

冗余:部分消息系统具有消息持久化功能,可以避免消息处理前丢失

扩展:消息系统是统一的数据接口,系统可独立扩展

可恢复性:系统中部分组件失效并不会影响整个系统,它恢复后仍然可从消息系统中获取并且处理数据

异步通信:在不需要立即处理请求的场景下,可以将请求放入消息系统,等不紧急时候再进行处理


常用消息系统介绍:

RabbitMQ:Erlang编写,支持多协议AMQP,XMPP,SMTP,STOMP。支持负载均衡,数据持久化。支持Peer-to-Peer和发布/订阅模式

Redis:不仅为NoSQL数据库,同时支持MQ功能,可做轻量级队列服务使用。长消息(大于10kb)性能比RabbitMQ差

ZeroMQ:轻量级,不需要单独的消息服务器或中间件,Peer-to-Peer。使用复杂度高

ActiveMQ:JMS实现,Peer-to-Peer,支持持久化,XA事务

Kafka/Jafka:高性能跨语言的分布式发布/订阅消息系统,数据持久化,全分布式,同时支持在线和离线处理

MetaQ/RocketMQ: Java实现,发布/订阅消息系统,支持本地事务和XA分布式事务


Kafka内容概述:

Apache Kafka是一个开源消息系统,有Scala完成;

kafka是一个分布式消息队列:生产者、消费者的功能。它提供了类似于JMS的特性,但是在设计实现上完全不同,此外它并不是JMS规范的实现;

kafka对消息保存时根据Topic进行归类,发送消息者称为Producer,消息接受者称为Consumer;kafka集群有多个kafka实例组成,每个实例成为broker;

无论是kafka集群,还是producer和consumer都依赖于zookeeper集群保存一些meta信息,以保证系统可用性


优点:

1,高吞吐率:在廉价的商用机器上单机可支持每秒100万条消息的读写

2,消息持久化: 所有消息均被持久化到磁盘,无消息丢失,支持消息重放

3,完全分布式:Producer,Broker,Consumer均支持水平扩展

4,同时满足适应在线流处理和离线批处理


核心组件:

Producer:生产者,发送消息的人

Consumer:消费者,消息接收的人

broker:kafka实例

Topic:

同一个Topic的消息可分布在一个或多个节点(Broker)上

一个Topic可以包含一个或多个Partition

每条消息仅属于一个Topic

Producer发布数据时,必须指定将数据发布到哪一个Topic上

Consumer订阅消息时,必须指定订阅哪个Topic的消息


Partition

一个Partition只分布于一个Broker上

一个Partition对应一个文件夹

一个Partition包含多个Segment

一个Segment对应一个文件

Segment由一个个不可变记录组成

记录只会被append到Segment中,不会被单独删除或修改

清除过期日志时,直接删除一个或者多个Segment







### Kafka简介及核心概念 Kafka个分布式流处理平台,最初由 LinkedIn 开发并开源。它旨在提供高吞吐量、低延迟的消息传递系统,适用于大规模数据管道和实时数据流处理场景。以下是 Kafka 的基本概念及其功能的详细介绍: #### 1. 核心组件 - **Zookeeper (注册中心)** Zookeeper 是 Kafka 集群中使用的分布式协调服务,负责维护集群的状态和元数据信息,例如 Topic 和 Partition 的分配信息、消费者组和消费者偏移量等[^1]。在 Kafka 版本 0.9 及之后,消费者的 Offset 信息从 Zookeeper 迁移到了 Kafka 的“__consumer_offsets”主题中[^4]。 - **Broker(核心节点)** Broker 是 Kafka 集群中的个节点,每个 Kafka 集群由多个 Broker 组成。Broker 负责存储消息并管理分区和副本。个 Broker 可以承载多个 Topic,并支持高并发访问[^2]。 - **Topic(话题)** Topic 是 Kafka 中的消息分类逻辑单元,类似于队列的概念。生产者将消息发送到指定的 Topic,而消费者从 Topic 中消费消息。Topic 可以被划分为多个 Partition,以实现扩展性和并行处理能力[^3]。 - **Partition(分区)** Partition 是 Topic 的子集,用于提高系统的扩展性。每个 Partition 是个有序的日志文件,消息在 Partition 内按顺序存储。为了保证消息的顺序性,Kafka 提供了基于 key 的分区策略[^3]。 - **Producer(生产者)** Producer 是负责向 Kafka 发送消息的客户端组件。Producer 可以将消息发送到个或多个 Topic 中,支持批量发送和消息压缩以提高性能。Producer 通过 key 值决定消息的路由策略,确保相同 key 的消息写入到同 Partition 中[^3]。 - **Consumer(消费者)** Consumer 是负责从 Kafka 消费消息的客户端组件。Consumer 从个或多个 Topic 中读取消息,并提交消息的偏移量 offset 到 Kafka,以保证消息的顺序性和致性。Consumer 支持断点续传和多线程消费[^2]。 - **Consumer Group(消费者组)** 消费者组是个逻辑概念,用于管理组 Consumer。不同消费者组之间互不影响,即同Topic 的消息可以被不同消费者组同时消费。而同个消费者组内的 Consumer 会分担 Topic 的 Partition,避免重复消费[^2]。 - **Replica(副本)** Replica 是 Partition 的副本机制,用于提高系统的可靠性和可用性。每个 Partition 有个 Leader 和多个 Follower,Leader 负责处理读写请求,Follower 实时同步数据并在 Leader 故障时接管角色。 #### 2. 功能特点 - **高吞吐量** Kafka 支持每秒百万级别的消息处理能力,适用于大数据场景下的日志收集、监控数据处理等任务[^1]。 - **持久化与可靠性** Kafka 将消息持久化到磁盘,并通过 Replica 机制确保数据不丢失,即使某个 Broker 出现故障也能快速恢复服务。 - **扩展性** Kafka 支持水平扩展,可以通过增加 Broker 节点来提升系统的处理能力和存储容量。 - **实时性** Kafka 提供低延迟的消息传递能力,适合需要实时处理的应用场景,如金融交易、在线广告投放等[^1]。 - **灵活的消息模型** Kafka 支持发布/订阅模式和队列模式,满足不同业务需求。同时,它还支持消息重播和时间窗口查询等功能[^3]。 ```python # 示例代码:创建 Kafka Producer 并发送消息 from kafka import KafkaProducer producer = KafkaProducer(bootstrap_servers='localhost:9092') producer.send('my-topic', b'Hello, Kafka!') producer.flush() ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值