【发布时间】: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