当前位置: 首页 > 知识库问答 >
问题:

KafKa分区器类,使用键将消息分配给主题内的分区

薛飞星
2023-03-14

我对Kafka是新的,所以道歉,如果我听起来很愚蠢,但我目前所理解的是…消息流可以定义为主题,就像类别一样。并且每个主题被分成一个或多个分区(每个分区可以有多个副本)。所以它们是平行的

他们说Kafka的主要网站

生成器能够选择将哪个消息分配给主题中的哪个分区。这可以通过循环的方式简单地平衡负载,也可以根据某个语义分区函数(例如基于消息中的某个键)来完成。

    ProducerData<String, String> data = new ProducerData<String, String>("test-topic", "test-key", "test-message");
    producer.send(data);

在0.8 beta版中创建producer时,我们可以通过配置文件提供partitioner类属性。自定义分区器类可以通过实现kafka分区器接口来创建。但我有点不明白它到底是如何工作的。0.8doc也解释不多。有什么建议吗?还是我漏掉了什么?

共有1个答案

鱼旺
2023-03-14

Kafka的每个主题都被分成许多分区。分区允许并行消耗,增加吞吐量。

Producer使用Kafka Producer客户机库将消息发布到一个主题,该库使用分区器在可用分区之间平衡消息。生产者连接到的代理负责使用ZooKeeper中的分区所有者信息将消息发送给该分区的领导者代理。消费者使用Kafka的高级消费者库(它处理代理领导者的更改,管理zookeeper中的偏移信息,并隐式地计算分区所有者信息等)来使用来自流中分区的消息;每个流可以映射到几个分区,这取决于使用者选择如何创建消息流。

例如,如果一个主题有10个分区和3个使用者实例(C1、C2、C3),它们都属于同一个使用者组,那么我们可以有不同的使用模型来允许读并行,如下所示

 类似资料:
  • 我有一个主题T,它有4个分区TP1、TP2、TP4和TP4。 假设我有8条消息M1到M8。现在当我的制作人将这些消息发送到主题T时,在以下场景下,Kafka经纪人将如何接收它们: 场景1:只有一个kafka broker实例具有前面提到的分区的主题T。 现在假设kafka broker实例1宕机,消费者会作何反应?我假设我的使用者正在读取broker实例1。

  • 我有一个带有4个分区的Kafka主题,因为我有一个带有4个消费者的消费者组。 我的目的是确保消息在分区之间均匀分布。 有没有办法验证kafka主题的跨分区消息分布?

  • 我想知道,在什么情况下,具有相同分区键的消息会进入不同的分区。 我使用下面给出的命令运行了属于同一组的两个消费者在控制台中监听一个主题: 我使用“纳米/Kafka-php”库将消息放入带有键 的主题。当我发送多个这样的消息时,我发现很少有消息转到第二个消费者,而大多数消息都发送给消费者1。 由于我对所有消息使用相同的密钥,因此我希望所有消息都由同一个使用者使用。每个使用者都绑定到每个分区。 我使用

  • Kafka主题分区偏移位置始终从0或随机值开始,如何确保使用者记录是分区中的第一条记录?有没有办法找出答案?如果有的话,请让我知道。谢谢。

  • 我使用的是Kafka流,具有无状态的简单处理器拓扑结构。 我有一个主题,有100个分区,有2台机器,每台机器有50个线程,运行同一个流媒体应用程序,因此最终我将在它们之间进行1-1映射。 主题中的消息已是键控消息。 我有一个逻辑约束,一旦线程连接到一个或多个分区,它应该继续处理这些分区(当然,直到重新启动发生,它会重新洗牌) 我从日志中看到线程反复(重新)加入消费者组。 我的问题,kafka 流

  • 假设我有一个名为“MyTopic”的主题,它有3个分区P0、P1和P2。这些分区中的每一个都有一个leader,并且本主题的数据(消息)分布在这些分区中。 1.Producer将始终根据代理上的负载以循环方式写到分区的领导者。对吗? 2.制作人如何认识隔断的首领?