【问题标题】:Round Robin message assignment to partition not working for messages without key in asp.net core轮询消息分配到分区不适用于 asp.net 核心中没有密钥的消息
【发布时间】:2022-04-08 12:52:59
【问题描述】:

尝试以循环方式向所有分区发送消息,但所有消息都进入最后一个分区。谁能帮我解决这个问题?

我正在使用 Confluent.Kafka nuget 包。我的生产者配置 -

"ProducerConfiguration": {
        "bootstrap.servers": "localhost:9092"
      }

还有我的 Kafka 生产者课程 -

public class Publisher
    {

        private ProducerConfig _producerConfig;
        public Publisher(IOptions<ApplicationSetting> _applicationSetting)
        {
            var producerConfig = _applicationSetting.Value.KafkaConfiguration.ProducerConfiguration;
            _producerConfig = new ProducerConfig(producerConfig);
        }

        public async Task<DeliveryResult<Null, TValue>> Publish<TValue>(TValue message, string topic = null)
        {
            using var producer = new ProducerBuilder<Null, TValue>(_producerConfig)
               .SetValueSerializer(new JsonSerializer<TValue>())
               .Build();
            var topicName = String.IsNullOrEmpty(topic) ? message.GetType().Name : topic;
            return await producer.ProduceAsync(topicName, new Message<Null, TValue>() { Value = message });
        }
    }

像这样发布消息 -

public class DemoHandler : IRequestHandler<SendMail, string>
    {

        private readonly Publisher _publisher;

        public DemoHandler(Publisher publisher)
        {
            _publisher = publisher;
        }
        public async Task<string> Handle(SendMail message, CancellationToken cancellationToken)
        {
            await _publisher.Publish(message);
            return "Message sent";
        }
    }

所有消息都只发送到最后一个分区 -

提前致谢。

【问题讨论】:

  • 您可以尝试在一段时间后向主题发送更多数据吗?这 5 条消息可能会被生产者批量处理,然后发送到一个分区(在您的情况下是最后一个分区)。
  • @mike 我尝试在 10 分钟后发送更多数据。在这种情况下,所有数据也将进入最后一个分区。

标签: c# asp.net-core .net-core apache-kafka microservices


【解决方案1】:

我添加了这个答案

https://stackoverflow.com/a/71791802/628908

我遇到了同样的问题。在这种情况下,问题将是因为您每次调用 Publish 方法时都在重新创建一个新的 IProducer 实例

如果您可以确保每次调用 Publish 时 IProducer 实例都是相同的,那将让生产者决定将消息发送到哪个分区。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-21
    • 1970-01-01
    相关资源
    最近更新 更多