【问题标题】:How can you create a partition on a Kafka topic using Samza?如何使用 Samza 在 Kafka 主题上创建分区?
【发布时间】:2015-11-29 20:36:06
【问题描述】:

我有几个 Samza 作业运行所有从 Kafka 主题读取消息并将新消息写入新主题。为了发送新消息,我使用了 Samza 内置的 OutgoingMessageEnvelope。还使用 MessageCollector 发送新消息。它看起来像这样:

collector.send(new OutgoingMessageEnvelope(SystemStream, newMessage))

有没有办法可以使用它向 Kafka 主题添加分区?例如根据用户 ID 进行分区或类似的东西。

或者如果有更好的方法我很想听!

【问题讨论】:

    标签: scala apache-kafka partitioning apache-samza


    【解决方案1】:

    您应该能够使用partitioning key 发送消息,

        public OutgoingMessageEnvelope(SystemStream systemStream,
                                   java.lang.Object partitionKey,
                                   java.lang.Object key,
                                   java.lang.Object message)
    Constructs a new OutgoingMessageEnvelope from specified components.
    Parameters:
    systemStream - Object representing the appropriate stream of which this envelope will be sent on.
    partitionKey - A key representing which partition of the systemStream to send this envelope on.
    key - A deserialized key to be used for the message.
    message - A deserialized message to be sent in this envelope.
    

    使用此方法会对您的数据进行分区。但是我认为,如果您正在考虑以编程方式控制分区的数量,您应该使用 kafka API 来创建/更改主题,如提到的 here

    【讨论】:

    • 我在文档中也看到了这一点,但不确定 partitionKey 是否需要任何序列化/反序列化配置(类似于密钥和消息)。
    • 您是否发现是否需要任何配置? Samza 是否会通过使用不同的分区键为您创建所有必要的分区?将什么对象作为分区键传递是否重要?
    猜你喜欢
    • 2017-07-31
    • 2018-11-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多