我可以让Kafka使用者/接收器连接以跳过主题中的特定分区吗?

时间:2019-03-28 23:05:58

标签: apache-kafka kafka-consumer-api apache-kafka-connect

Kafka Connect中的

任何选项可指定专门从哪个分区读取消息。基本上,我正在Kafka Connects中寻找一个选项来手动分配要读取的分区列表。

类似于KafkaConsumer API中的Assign()方法

https://kafka.apache.org/0100/javadoc/org/apache/kafka/clients/consumer/KafkaConsumer.html#assign(java.util.Collection)

1 个答案:

答案 0 :(得分:0)

您不能仅收听Kafka Connect中的特定分区。

但是您可以实现仅从特定分区插入消息的功能。

要具有此功能,您需要实现自定义Transformation。 如果跳过了Transformation返回null的消息,那么您的自定义Transformation必须为有害分区返回null

示例代码如下:

public class PartitionFilter <R extends ConnectRecord<R>> implements Transformation<R> {

    public static final ConfigDef CONFIG_DEF = new ConfigDef();

    @Override
    public void configure(Map<String, ?> props) {
        final SimpleConfig config = new SimpleConfig(CONFIG_DEF, props);
    }

    @Override
    public R apply(R record) {
        int neededPartition = 1; // some parititon
        if (record.kafkaPartition() != neededPartition)
           return null;
        return record;
    }

    @Override
    public void close() {
    }

    @Override
    public ConfigDef config() {
        return CONFIG_DEF;
    }
}

可以找到有关转换的更多信息:https://kafka.apache.org/documentation/#connect_transforms