Kafka 总结

本文深入探讨Kafka的核心概念,包括broker、partition、consumer group等,并详细阐述其存储原理,消息写入、路由及消费流程,以及HW阶段机制,帮助理解Kafka如何保证数据一致性与高可用性。

kafka最初的使命是用于存储数据,所以天生会丢消息,一般在重要的业务系统中,都不会使用kafka。

核心概念

  • broker:kafka集群中的一个节点;
  • broker leader:负责而选举partition leader;
  • coordinator:负责维护当前broker中各个partition被消费的offset;
  • topic:kafka中消息的逻辑分类,也可以理解为一个消息通道;
  • partition:为了提高吞吐量,topic被分成了多个partition(分区),partition内的数据有序;
  • segment:每个partition在存储的时候,为了提高读写效率,被分成了多个segment段;
  • consumer:消息的消费者;
  • producer:消息的生产者;
  • consumer group:消费者的一种高可用机制,在消费者组内,一条消息会被互斥消费;
  • deplicas of partition:为了消息的高可用,每个partition会存在多分副本;
  • partition leader:partition的多副本中,会存在一个leader负责数据的读写,其他副本只负责数据备份;
  • partition follower:用于做数据备份的partition;
  • ISR:partition的follower列表;
  • offset:partition中的消息是有序的,每条消息都有一个唯一的偏移量,即offset;
  • rebalance:默认情况下,一个消费者会消费一个或多个partition,或不消费任何partition,但是,当partition的数量发生变化或者consumer的数量发生变化时,对于consumer,partition的所有权就会在consumer之间转移,这个过程就做rebalance;

存储原理

kafka中消息的最小逻辑单元topic,在数据存储的时候,一个topic会被拆分成多个partition,每个partition会分散到集群中的不同节点上,同时,每个partition还会存在多分副本,保证数据的可靠性。

在存储数据时,一个partition对应了磁盘上的一个文件夹,而这个paritition中的消息会被拆分成多个segment,每个segment包含了三个核心文件:

  • segmentname.index 消息偏移量索引文件
  • segmentname.timeindex 以时间为维度的索引文件
  • segment.log 消息文件

索引文件中,是以分段的方式来建立segment中数据的索引,这样就可以尽量减少一次数据检索的范围。

在创建topic的时候,要确定partition的数量是broker数量的整数倍,这样可以避免数据整个集群中发生倾斜。

HW阶段机制

在消费数据时,consumer从partition消费数据,但是并不是partition leader收到消息后,consumer就能够立即消费,而是当所有partition follower都同步完成后,这条消息才对consumer 可见,但是,如果在partition follower同步数据的过程中,partition leader宕机了,此时就会触发broker controller的leader选举,这时候就会从那些与原partition leader数据不一致的partition follower(ISR列表)中选出一个新的leader,但是,过了一段时间后,原partition leader又活过来了,此时,它作为partition follower,为了保证数据的一致性,这个重新活过来的partition follower就会从根据HW阶段机制将自己原有的与现在partition leader不一致的数据截掉。

HW阶段机制包含两个概念:
HW:High Water,高水位,用来标记最后一条被所有follower同步的一条标线;
LEO:Log End Offset:partition leader的接收到的最后一条数据;

当producer向partition 写入数据时,可以通过参数来配置是否需要等到partition leader向follower同步数据,这也是中保证写入数据成功的机制,每写一条消息LEO的offset就会进行调整,但只有当所有follower都将数据同步后,才会调整HW。

消息写入流程

  1. producer从zookeeper中获取partition leader;
  2. 将消息发给partition leader;
  3. partition leader将数据写入本地segment,并通知isr列表中的follower;
  4. partition follower从leader pull 数据并写入本地segment,写入成功后向leader返回ack消息;
  5. leader收到所有follower的ack消息后,返回给producer ack消息,一次写入成功;

发送消息时,可以通过request.required.acks参数来调整发送消息的可靠性:
0:异步发送,表示不需要kafka返回ack消息;
1:只要partition leader收到消息后就立即返回ack;
-1:等待所有partition follower都同步完成后,partition leader再返回producer给ack消息;

发送消息的可靠性主键增高,但是性能会逐渐下降,使用时,需要根据不能的业务场景进行调节。

消息路由规则

通过代码向kafka发送消息的时候,消息被封装成Record,每个Record包含了一个Key和一个消息体,Key主要用来做消息路由,但是也可以不指定Key值,具体的路由规则如下:

  • 若指定了partition,则直接将消息发送到指定的partition;
  • 如果没有执行paritition但指定了key值,那么通过key的哈希值与topic分区数取模来确定发往哪个partition;
  • 若partition和key都没有指定,则通过轮询的方式发送到其中一个partition;

消息消费流程

  1. 消费者订阅指定的topic
  2. Broker Controller给这个消费者分配partition,并将对应的offset发给consumer;
  3. consumer 开始消费消息;
  4. consumer消费完消息后,向对应的Coordinator反馈;
  5. Coordinator更新对应的offset;

重复消费

  • 同一个consumer重复消费
由于Consumer消费能力比较低,导致消费超时,最终offset不会被提交,最终导致重复消费。
  • 不同的consumer重复消费
consumer消费了消息,但还未来得及提交offset就宕机了,
这些已经被消费过的消息会被其他consumer重复消费;

解决办法:

  1. 增加ack消息超时时限;
  2. 设置enable.auto.commit=false,手动进行ack消息的提交;
内容概要:本文系统阐述了企业新闻发稿在生成式引擎优化(GEO)时代下的全渠道策略与效果评估体系,涵盖当前企业传播面临的预算、资源、内容与效果评估四大挑战,并深入分析2025年新闻发稿行业五大趋势,包括AI驱动的智能化转型、精准化传播、首发内容价值提升、内容资产化及数据可视化。文章重点解析央媒、地方官媒、综合门户和自媒体四类媒体资源的特性、传播优势与发稿策略,提出基于内容适配性、时间节奏、话题设计的策略制定方法,并构建涵盖品牌价值、销售转化与GEO优化的多维评估框架。此外,结合“传声港”工具实操指南,提供AI智能投放、效果监测、自媒体管理与舆情应对的全流程解决方案,并针对科技、消费、B2B、区域品牌四大行业推出定制化发稿方案。; 适合人群:企业市场/公关负责人、品牌传播管理者、数字营销从业者及中小企业决策者,具备一定媒体传播经验并希望提升发稿效率与ROI的专业人士。; 使用场景及目标:①制定科学的新闻发稿策略,实现从“流量思维”向“价值思维”转型;②构建央媒定调、门户扩散、自媒体互动的立体化传播矩阵;③利用AI工具实现精准投放与GEO优化,提升品牌在AI搜索中的权威性与可见性;④通过数据驱动评估体系量化品牌影响力与销售转化效果。; 阅读建议:建议结合文中提供的实操清单、案例分析与工具指南进行系统学习,重点关注媒体适配性策略与GEO评估指标,在实际发稿中分阶段试点“AI+全渠道”组合策略,并定期复盘优化,以实现品牌传播的长期复利效应。
### Kafka中间件的功能特性 Kafka 是一种分布式流处理平台,具有高度的灵活性和可扩展性。它可以作为消息中间件使用,同时也支持日志收集和数据处理等功能[^1]。以下是 Kafka 的主要功能特性: - **高吞吐量**:Kafka 能够高效地处理大规模的数据流,适合用于大数据环境下的实时数据分析。 - **持久化存储**:通过将消息写入磁盘并提供复制机制,Kafka 提供了可靠的消息传递能力[^2]。 - **分区与并行处理**:Topic 可以划分为多个 Partition,从而实现消息的并行生产和消费,提升系统的整体性能。 - **灵活的消息格式**:Kafka 支持多种数据类型和格式,允许用户自定义消息结构和处理逻辑[^1]。 ### Kafka 中间件的核心组件 为了更好地理解 Kafka 的工作原理,下面列举其核心组成部分及其作用[^2]: - **Broker**:Kafka 集群中的节点,负责接收、存储以及分发消息。 - **Topic**:用来分类消息的主题名称,生产者向 Topic 发送消息,消费者从 Topic 订阅消息。 - **Producer**:负责创建消息并将它们发送至 Broker 的客户端程序。 - **Consumer**:从 Broker 获取消息并进行处理的客户端程序。 - **Partition**:物理上划分的一个 Topic 子集,每个 Partition 内部保持消息的顺序。 - **Consumer Group**:一组 Consumer 组成的集合,同一组内的 Consumer 不会重复消费同一条消息。 ### Kafka 的典型应用场景 由于 Kafka 具备高性能、高可用性和灵活的设计特点,因此广泛应用于以下领域[^3]: - **实时数据管道构建**:连接不同系统之间的数据流动,例如 ETL 工作流程。 - **网站活动跟踪**:记录用户的点击行为和其他交互动作以便后续分析。 - **度量指标监控**:采集服务器运行状态或其他业务层面的关键绩效指标(KPIs)。 - **在线推荐引擎**:依据用户偏好动态调整商品展示列表或广告投放策略。 尽管 RocketMQ 更加侧重于强一致性保障的任务调度场合比如金融支付环节等[^3],然而对于大多数互联网服务而言,Kafka 凭借着卓越的表现力已然成为首选方案之一。 ```python from kafka import KafkaProducer, KafkaConsumer producer = KafkaProducer(bootstrap_servers='localhost:9092') producer.send('my-topic', b'Hello, Kafka!') consumer = KafkaConsumer( 'my-topic', bootstrap_servers=['localhost:9092'], auto_offset_reset='earliest', enable_auto_commit=True, group_id='my-group') for message in consumer: print(f"{message.topic}:{message.partition}:{message.offset}: key={message.key} value={message.value}") ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值