【问题标题】:Kafka connect read value based on a key and write to HDFSKafka连接基于密钥的读取值并写入HDFS
【发布时间】:2018-12-18 12:45:29
【问题描述】:
  1. 有没有什么方法可以只将特定事件类型从 kafka 主题接收到 HDFS,使用 kafka connect HDFS 连接器过滤其余类型?
  2. 我们是否可以根据某个键分离输入事件并写入不同的分区。以便特定键的值转到特定分区?
  3. 我们可以使用存储在模式注册表中的键来获取特定于 avro 格式数据的特定键的主题中的值吗?如果我的理解需要澄清,请告诉我。

如果 Kafka connect 不具备此功能,是否可以使用 kafka 流实现此功能?如果可用,请提供一些文档。

【问题讨论】:

    标签: apache-kafka avro apache-kafka-connect confluent-platform


    【解决方案1】:

    有没有办法将 kafka 主题中的特定事件类型仅接收到 HDFS,使用 kafka connect HDFS 连接器过滤剩余类型?

    Kafka Connect 具有用于处理消息的转换,但它不用于过滤。这通常由 Kafka Streams 或 KSQL 完成

    我们可以根据某个key来分离输入事件并写入不同的partition,这样特定key的值就去特定partition吗?

    Confluent 文档中提到的FieldPartitioner 类可以做到这一点(警告:我相信它只做顶级字段,而不是嵌套的 JSON 或 Avro 记录字段)

    我们可以使用存储在模式注册表中的键来获取特定于 avro 格式数据的特定键的主题中的值吗?

    我不明白这个问题,但是 HDFS Connect 在写入数据时默认会忽略 Kafka 消息密钥,所以我要说不。

    Kafka 数据不是按键索引的,而是按它分区的,这意味着如果您确实使用了 DefaultPartioner 而不是 FieldPartitioner,那么所有键都将通过 Kafka 分区落在单个文件系统路径中。只有这样您才能查询,但不是通过键,而是通过分区。例如使用 Spark 或 Hive。同样,这是默认行为 - 如前所述,您可以使用 Transform 将 Kafka 密钥添加到数据中,然后您可以通过它进行查询

    【讨论】:

    • 另一个注意事项是,您可能会考虑将不同的事件类型放在不同的主题中,而不是必须过滤一个主题。您可以使用连接器订阅多个主题,此策略可能会简化您的方案。
    • 假设有多种事件类型。一种可能只是按一种类型中的字段进行过滤
    • 是的,我认为原始帖子表明该主题有多种类型,但当然取决于场景:)
    • 谢谢!!我们可以使用Field partition-er中的key来根据key进行分区吗?
    • 如果您使用转换将键移动到消息值中,那么应该是可能的。见github.com/jcustenborder/kafka-connect-transform-archive
    猜你喜欢
    • 2018-10-24
    • 2018-01-31
    • 2016-03-27
    • 2020-06-11
    • 2021-10-19
    • 2019-10-15
    • 1970-01-01
    • 2018-11-22
    • 2020-12-12
    相关资源
    最近更新 更多