type
status
date
slug
summary
tags
category
icon
password
Property
May 9, 2023 05:23 AM
本文介绍关于分布式Kafka的Topic问题

🤔 Kafka分布式体现在哪些方面?

1.多副本机制

Kafka通过多副本机制来保证数据的高可用性和容错性。
一个分区(partition)可以有多个副本(replicas),副本会被放置在不同的broker上,以避免单点故障。
每个副本都是完整的分区数据的拷贝,可以被用作读取和写入数据。
如果某个broker宕机或者出现网络问题,其他的broker上的副本可以接替工作。

2.分布式存储

Kafka的数据被分成多个分区,并将这些分区存储在不同的broker上。
每个分区都可以独立地扩展,因此Kafka可以处理海量的消息流,并且可以通过添加更多的broker来提高其容量和吞吐量。
分布式存储使得Kafka可以有效地管理大量的数据,并且具有良好的可扩展性。

3.分布式协调

Kafka使用Zookeeper来进行分布式协调。
Zookeeper是一个分布式系统协调器,它可以确保Kafka集群中所有的broker之间的一致性。
例如,在Kafka中,Zookeeper可以协调leader选举过程,确保只有一个broker能够写入特定的分区。

4.分布式消费

Kafka的消费者(consumer)也可以进行分布式处理。
消费者可以从不同的主题(topic)和分区中读取消息,并且可以将消息分发到多个线程或者服务器上进行处理。
因此,Kafka可以满足高吞吐量、低延迟的应用需求。

场景一:简单的商城系统中Kafka消息生产消费流程

0x00001.场景介绍:

商城系统中有很多的业务场景需要使用消息队列,比如订单创建、支付完成、物流信息更新等。这些场景需要将消息异步传递给其他服务,以便进行后续操作。

1.消息生产流程

商城系统中的消息生产者负责生成消息并将其发送到Kafka集群。
在发送消息之前,需要先创建一个Kafka的生产者对象并配置相关参数,比如Kafka集群地址、消息的序列化方式等。商城系统中的生产者将要发送的消息按照指定的主题(Topic)发送到Kafka集群中的Broker节点。在这个过程中,生产者需要指定要发送的消息内容和目标主题,同时也可以指定一些其他元数据信息,如消息的Key和Partition等
然后,调用生产者对象的send方法,将消息发送到所需的主题(Topic)中。发送消息时,可以选择同步或异步方式。同步方式会等待broker确认消息已写入到磁盘中,而异步方式不会等待broker的确认,因此速度更快。
当消息产生发出之后,Kafka集群中的Leader Broker节点接收到生产者发送的消息后,将其写入到本地磁盘的日志文件中,并在内存中建立相关索引,以便后续的消息读取和查询操作。
一旦消息被成功写入到Leader Broker节点的日志文件中,该节点将向所有其他副本Broker节点发送副本同步请求,以确保所有副本节点中的消息都与Leader节点保持一致。如果某个副本节点没有及时响应或者出现故障,则Leader节点会尝试将该节点从副本列表中排除出去,直到所有副本节点都与Leader节点保持同步为止。

2.消息消费流程

在消息被成功写入到Kafka集群中的所有Broker节点之后,消费者就可以开始拉取数据进行消费。
在这个过程中,消费者需要指定要消费的主题名称(Topic)以及消费进度也叫消息偏移量(Offset)等信息,Kafka会根据消费者的Offset来确定下一条待消费的消息。
当消费者从Broker节点中拉取到消息后,它将对消息进行处理,并记录消费进度。消费者可以按照不同的消费模式进行消费,如批量消费、顺序消费、并发消费等,以满足不同应用场景和业务需求。
最后,Kafka会周期性地将已经消费完成的消息从日志文件中删除,释放存储空间。同时,Kafka还提供了多种监控和管理工具,以便对Kafka集群进行实时监控和故障排除。

场景二:分布式Kafka消息生产消费设计:商品、活动、库存、订单、支付等模块

(1)消息主题设计

当使用场景模块复杂的时候,需要将消息进行归类,单从单一消息的角度去设计,应该为每个模块设计一个单独的主题,例如:
  • 商品主题:用于发布商品信息
  • 活动主题:用于发布活动信息
  • 库存主题:用于发布库存变更信息
  • 订单主题:用于发布订单相关信息
  • 支付主题:用于发布支付相关信息

(2)消费生产者

对于每个主题,都应该有一个对应的消息生产者来负责向 Kafka 集群发送消息。
在商城系统中,每个模块对应一个消息生产者,它们会将不同类型的消息发送到对应的主题中。
可以使用 Kafka 生产者 API 来实现消息的发送,根据业务场景和需求可以设置消息的键值、消息延迟发送等参数。

(3)消息消费者

对于每个主题,都应该有一个对应的消息消费者来负责从 Kafka 集群消费消息。
在商城系统中,每个模块对应一个消息消费者,它们会从对应的主题中消费消息,并进行相应的业务处理。
可以使用 Kafka 消费者 API 来实现消息的消费,需要注意的是,消费者需要定时提交消费位移来标识已经消费过的消息,以确保不会出现重复消费或漏消费的情况。

(4)消息序列化与反序列化

在消息生产和消费的过程中,需要将消息进行序列化和反序列化。
Kafka 支持多种消息序列化格式,如 JSON、Avro 等。
为了提高性能,可以使用二进制格式进行序列化。
在商城系统中,可以根据具体业务需求选择合适的序列化和反序列化方式,并编写相应的序列化器和反序列化器。

(5)消息处理失败处理策略

由于网络波动、机器故障等原因,可能会导致消息处理失败。
如果没有良好的异常处理机制,这些错误可能会对整个系统造成影响。
因此,在设计 Kafka 消息生产消费时,需要考虑如何处理失败的消息。
通常情况下,可以通过重试、记录日志等方式来处理失败的消息。如果消息处理失败次数超过一定阈值,则需要采取告警机制来通知相关人员处理问题。
 
致谢:
💡
有关Kafka消息生产消费的问题,欢迎您在底部评论区留言,一起交流~
 
 
Kafka自学笔记(一):关于Kafka的配置问题Kafka自学笔记(三):关于Kafka消息顺序问题
fntp
fntp
多一点兴趣,少一点功利
公告
type
status
date
slug
summary
tags
category
icon
password
Property
Sep 5, 2023 06:04 AM
📝 博客只为了记录我的学习生涯
😎 我的学习目标是成为一名极客
🤖 我热爱开源当然我也拥抱开源
💌 我期待能收到你的Email留言
📧 我的邮箱:stickpoint@163.com
欢迎交流~