apache-kafka - 有没有办法在不使用 Message 键的情况下将消息发布到 kafka 中的特定分区?
问题描述
我有数百万条记录,每条记录都有唯一标识符。
所有记录都按序列号分类,假设有 10k 条记录属于 series-1,另外 10k 条记录属于 series-2,依此类推。
现在我想将所有系列 1 记录发布到分区 1,所有系列 2 到分区 2 等等..
为此,我不想使用消息键,还有其他选择吗?
我是kafka的新手,如果问题有误或没有正确的细节,请纠正我?
解决方案
您可以使用以下方法在特定分区上发布消息
简单的 Kafka 生产者
/**
Creates a record to be sent to a specified topic and partition
**/
public ProducerRecord(String topic, Integer partition, K key, V value) {
this(topic, partition, null, key, value, null);
}
在分区上发布消息的基本示例
Properties properties = new Properties();
properties.setProperty(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, <bootstrap server detail>);
properties.setProperty(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, StringSerializer.class.getName());
properties.setProperty(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG, StringSerializer.class.getName());
//Define partition based on condition series-1 to 2 series-2 to 2
int partition=getPartitionOnCondition.....
String topic=""..
Producer<String, String> producer = new KafkaProducer<String,String>(
properties);
ProducerRecord<String, String> record = new ProducerRecord<String, String>(topic, partition, key, value);
producer.send(record);
自定义分区器
您还可以将自定义分区器用于生产者或流分区器
https://kafka.apache.org/documentation.html
自定义流分区器(如果您使用的是 Kafka Stream)
如果您使用的是 Kafka Stream。它还提供了一种在 Kafka Stream https://kafka.apache.org/23/javadoc/org/apache/kafka/streams/processor/StreamPartitioner.html周围启用自定义分区器的方法
推荐阅读
- wordpress - WordPress Elementor 响应式媒体查询
- c# - 使用 xceed.words.net.docx 写入 docx,在 VS 中运行时有效,在作为内置 exe 运行时每页写入一行
- html - XSL 模板在我的 HTML 中不起作用
- excel - 如何在所有工作表的特定单元格中写入相同的信息?
- c# - 如何在 C# 中将 IFormFile 转换为 byte[]?
- c# - 在两个类之间传递信息,其中一个是 MonoBehavior
- python - discord.py - 要列出的字符串
- python - python代码拆分成多个嵌套列表
- postgresql - 创建和调用超过 100 个参数的函数
- php - PHP - 如何在 Windows-1252 中保存文件?