Kafka_基本结构和原理

Kafka是一个高吞吐、低延迟的分布式消息系统,最初由LinkedIn开发并贡献给Apache。它用于日志收集、消息系统、用户活动跟踪、运营指标监控和流式处理等场景。Kafka具有可扩展性、持久性和容错性,支持 Consumergroup 模式和消息持久化。Producer使用异步push方式向broker发送消息,Consumer则从broker拉取消息。Kafka利用分区机制提高吞吐量,每个分区具有多个副本以实现容错。消费者组内的消费者可以并行消费不同分区,但不会消费同一分区的消息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、概念理解

Kafka是最初由Linkedin公司开发,是一个分布式、支持分区的(partition)、多副本的(replica),基于zookeeper协调的分布式消息系统,它的最大的特性就是可以实时的处理大量数据以满足各种需求场景:比如基于hadoop的批处理系统、低延迟的实时系统、storm/Spark流式处理引擎,web/nginx日志、访问日志,消息服务等等,用scala语言编写,Linkedin于2010年贡献给了Apache基金会并成为顶级开源 项目。

(1)产生背景

当今社会各种应用系统诸如商业、社交、搜索、浏览等像信息工厂一样不断的生产出各种信息,在大数据时代,我们面临如下几个挑战:

  1.如何收集这些巨大的信息

  2.如何分析它

  3.如何及时做到如上两点

以上几个挑战形成了一个业务需求模型,即生产者生产(produce)各种信息,消费者消费(consume)(处理分析)这些信息,而在生产者与消费者之间,需要一个沟通两者的桥梁-消息系统。从一个微观层面来说,这种需求也可理解为不同的系统之间如何传递消息。

Kafka诞生

Kafka由 linked-in 开源

kafka-即是解决上述这类问题的一个框架,它实现了生产者和消费者之间的无缝连接。

kafka-高产出的分布式消息系统(A high-throughput distributed messaging system)

(2)Kafka的特性

高吞吐量、低延迟:kafka每秒可以处理几十万条消息,它的延迟最低只有几毫秒

可扩展性:kafka集群支持热扩展

持久性、可靠性:消息被持久化到本地磁盘,并且支持数据备份防止数据丢失

容错性:允许集群中节点失败(若副本数量为n,则允许n-1个节点失败)

高并发:支持数千个客户端同时读写

(3)Kafka场景应用

日志收集:一个公司可以用Kafka可以收集各种服务的log,通过kafka以统一接口服务的方式开放给各种consumer,例如hadoop、Hbase、Solr等。

消息系统:解耦和生产者和消费者、缓存消息等。

用户活动跟踪:Kafka经常被用来记录web用户或者app用户的各种活动,如浏览网页、搜索、点击等活动,这些活动信息被各个服务器发布到kafka的topic中,然后订阅者通过订阅这些topic来做实时的监控分析,或者装载到hadoop、数据仓库中做离线分析和挖掘。

运营指标:Kafka也经常用来记录运营监控数据。包括收集各种分布式应用的数据,生产各种操作的集中反馈,比如报警和报告。

流式处理:比如spark streaming和storm

事件源

(4)Kafka一些重要设计思想

Consumergroup:各个consumer可以组成一个组,每个消息只能被组中的一个consumer消费,如果一个消息可以被多个consumer消费的话,那么这些consumer必须在不同的组。

消息状态:在Kafka中,消息的状态被保存在consumer中,broker不会关心哪个消息被消费了被谁消费了,只记录一个offset值(指向partition中下一个要被消费的消息位置),这就意味着如果consumer处理不好的话,broker上的一个消息可能会被消费多次。

消息持久化:Kafka中会把消息持久化到本地文件系统中,并且保持极高的效率。

消息有效期:Kafka会长久保留其中的消息,以便consumer可以多次消费,当然其

Kafka是一个分布式流处理平台,它的基本原理是通过将数据流发布到主题(topic)上,然后订阅主题的消费者可以实时读取处理这些数据。下面是Kafka基本原理: 1. 主题(Topics):数据被组织成一个个主题,每个主题都可以有多个生产者消费者,并且可以分为多个分区(partitions)。每个主题都有一个唯一的名称,用于标识区分不同的数据流。 2. 生产者(Producers):生产者将数据发布到指定的主题上。它负责将数据按照指定的分区策略写入到对应的分区中。生产者可以同时向多个主题写入数据。 3. 消费者(Consumers):消费者订阅一个或多个主题,并且从每个分区中读取数据。消费者以消费者组(consumer group)的形式进行组织,每个组内可以有多个消费者实例。每个分区只能由同一个消费者组内的一个消费者实例进行消费。 4. 分区(Partitions):每个主题可以分为多个分区,每个分区都有一个唯一的标识符(partition ID)。分区是Kafka实现高吞吐量容错性的关键。每个分区在物理上是一个有序且不可变的数据队列。 5. 副本(Replication):Kafka通过副本机制保证数据的可靠性。每个分区可以配置多个副本,其中一个副本被选为领导者(leader),其他副本作为追随者(follower)。领导者负责处理读写请求,追随者只负责复制领导者的数据。 6. 利用日志结构存储:Kafka使用日志结构存储(log-structured storage)来持久化数据。数据以追加方式写入磁盘,而不是直接修改原始文件。这种设计使得Kafka能够实现高吞吐量的读写操作。 总结来说,Kafka通过主题、分区、生产者消费者的组合,实现了高吞吐量、可扩展性容错性的分布式流处理。它适用于大规模数据的实时处理异步通信场景。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值