Kafka 实操

一个topic可以有几个分区,一般一个主题的分区数通常与消费者组的消费者数目相当
消费组可以订阅一个或多个主题,并且每个主题可以有多个分区

在一个假想的实时数据处理项目中,让我们考虑一个电商平台,该平台需要实时处理各种类型的数据:用户活动、订单、库存变化等。为了高效地处理这些信息流,可以使用 Kafka 作为数据流处理平台。以下是相关组件的解释和它们在项目中的作用:

1 Kafka 组件

1 Broker: 在我们的电商平台项目中,Broker 是 Kafka 集群中的单个服务器节点。它负责存储数据和服务客户端请求。我们可能有多个 Broker,以便在负载增加时能够水平扩展。

2 分区 (Partition): 每个 Kafka 主题可以分为多个分区,以便并行处理。例如,一个用于存储订单信息的 “orders” 主题可能会有多个分区。每个分区可以存在于不同的 Broker 上。 在Kafka中,一个Broker可以托管多个分区,而一个分区也可以(并且通常会)在多个Broker上有副本。

3 Topic: 主题是数据流的分类或名称。在我们的项目中,可能有多个主题,比如 “user-activity”、“orders”、“inventory” 等。

4 生产者 (Producer): 生产者负责向 Kafka 主题发送数据。在电商平台中,当用户进行购买、浏览产品或其他活动时,相应的服务(如前端应用、订单处理系统等)将作为生产者,将这些事件发送到相应的 Kafka 主题。

5 消费者 (Consumer): 消费者从 Kafka 主题读取数据。例如,一个用于实时分析的服务可能是 “user-activity” 主题的消费者,而库存管理系统可能是 “orders” 主题的消费者。

6Replication Factor
Replication Factor(副本因子)是指每个Partition被复制的次数。也就是说,每个Partition都有N个副本,其中N就是Replication Factor。

Replication Factor解决了消息传输中的可靠性和容错性问题。如果没有Replication Factor,那么当一个Broker宕机时,它上面存储的所有Partition都将不可用,导致消息丢失和系统不可用。

当Replication Factor大于1时,每个Partition都会被复制到多个Broker上。这样,即使某个Broker宕机,其他Broker仍然可以继续提供服务。同时,Kafka还支持Leader和Follower机制,保证只有Leader才能够进行写操作,从而保证数据的一致性和正确性。
在生产环境中,通常会将Replication Factor设置为2或3

2 Zookeeper 的角色

1 集群协调: Zookeeper 负责管理 Broker,以确保所有 Broker 正常运行。

2 配置管理: Zookeeper 存储了 Kafka Broker 的所有重要配置信息。

3 Leader 选举: 对于每个分区,都有一个 Leader Broker 和多个 Follower Broker。Zookeeper 协助进行 Leader 选举。

4 状态检查: Zookeeper 监控 Kafka Broker 的状态,并在出现问题时进行通知。

5 分布式锁和同步: Zookeeper 提供了一种机制,以确保在更改配置或执行其他协调任务时,只有一个 Broker 或进程可以执行操作。

3 每个分区为什么要有leader broker 和 follower broker?

1 负载均衡和性能

读取负载均衡: 尽管只有 Leader Broker 可以接受写操作,但读操作可以从任何一个 Broker(包括 Leader 和 Follower)进行。这有助于分散读取负载。

写入性能: 所有写入操作都首先发生在 Leader 上,然后异步复制到 Follower 上。这意味着写操作通常可以在 Leader 确认之后立即返回,不必等待所有 Follower 的确认,从而提高了写入性能。

2 数据一致性

强一致性: 在给定时刻,只有一个 Leader 可以接受写入。这消除了复杂的并发控制问题,确保了数据的一致性。

复制一致性: Follower 从 Leader 同步数据,确保数据在多个地点保持一致。这在 Leader 故障时特别重要,因为这样一个 Follower 可以成为新的 Leader,并保证数据的完整性。

3 扩展性

水平扩展: 有了多个 Follower,新的节点(Broker)可以加入集群,并成为现有分区的 Follower,这有助于集群的水平扩展。

4 无头服务

在 Kubernetes 中,一个无头服务(Headless Service)是一种特殊类型的服务,用于直接通过其 Pod IP 地址而非通过一个负载均衡器或虚拟 IP 来访问 Pod。这样,每个 Pod 都有一个稳定的、可预测的 DNS 名称。

Kafka 在 Kubernetes 环境下通常被部署为无头服务,主要有以下几个原因:

1 状态保留: Kafka Broker 是有状态的,每个 Broker 都有自己独立的存储和网络标识。无头服务能够为每个 Kafka Broker 提供一个稳定的网络标识。

2 数据分区: Kafka 数据是分区化的,并且每个分区都会被分配到一个特定的 Broker。因此,生产者和消费者需要能够直接与特定的 Broker 通信,而不是通过负载均衡器。

3 故障恢复和高可用: 当一个 Broker 故障时,Kafka 需要知道如何将数据重新分配到其他健康的 Broker 上。使用无头服务使得这个过程更为简单和可预测。

4 负载分布: 在 Kafka 集群中,不是所有的 Broker 都是相同的。一些可能有更多的分区或者更高的负载。使用无头服务,生产者和消费者可以根据自己的需求选择与哪个 Broker 通信,而不是被负载均衡器随机分配。

5 网络延迟: 通过去掉负载均衡层,无头服务可以降低网络延迟,这在高吞吐量和低延迟要求的场景中是非常重要的。

others

CAP 理论

分布式CAP理论是指在分布式系统中,一致性(Consistency)、可用性(Availability)和分区容忍性(Partition Tolerance)这三个目标无法同时满足,只能同时满足其中两项。这是由于在分布式系统中,网络延迟、故障和数据复制等因素会带来一定的不确定性和冲突。具体来说:

一致性(C):所有节点在同一时间看到相同的数据。
可用性(A):保证所有请求都能够得到响应。
分区容忍性(P):系统在网络分区发生时仍然能够正常工作。

分布式CAP理论解决的问题是如何在分布式系统中做出权衡,选择最适合业务需求的目标。例如,对于一个电商网站,一致性可能更重要,因为需要保证用户在多个设备上看到的商品信息是一致的;而对于一个社交媒体应用,可用性可能更重要,因为用户需要即时地发布和查看动态。如果没有分布式CAP理论的指导,可能会出现系统设计偏向某一方面,造成重大影响。

消息队列中的点对点模式和发布/订阅模式是两种常见的消息传输方式

1 点对点模式:
点对点模式是指消息生产者向一个特定的队列发送消息,然后消息消费者从该队列中读取消息。这种模式下,每个消息只能被一个消费者消费,消费后会从队列中删除。点对点模式适合于需要精确控制消息传输过程的场景,例如任务调度、RPC(远程过程调用)等。

举例:假设一个在线购物网站的订单系统,每当有新订单生成时,就需要将订单信息通知给相应的库存管理系统进行处理。此时可以采用点对点模式,将订单消息发送到一个特定的队列中,由库存管理系统从该队列中读取并处理消息。

2 发布/订阅模式:
发布/订阅模式是指消息生产者将消息发送到一个主题(Topic)中,然后所有订阅该主题的消费者都可以接收到该消息。在发布/订阅模式下,同一条消息可以被多个消费者同时接收,不会从主题中删除。发布/订阅模式适合于需要广播消息或者多个消费者共享消息的场景。

举例:假设一个新闻网站需要向多个订阅者推送最新新闻。此时可以采用发布/订阅模式,将新闻消息发送到一个特定的主题中,所有订阅该主题的用户都可以接收到该消息。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值