KSQL中定义的双分区属性

Double partition property defining in KSQL

文章中有例子https://docs.confluent.io/current/ksql/docs/developer-guide/transform-a-stream-with-ksql.html:

CREATE STREAM pageviews_transformed
  WITH (TIMESTAMP='viewtime',
        PARTITIONS=5,
        VALUE_FORMAT='JSON') AS
  SELECT viewtime,
         userid,
         pageid,
         TIMESTAMPTOSTRING(viewtime, 'yyyy-MM-dd HH:mm:ss.SSS') AS timestring
  FROM pageviews
  PARTITION BY userid
  EMIT CHANGES;

可以看到定义了双分区属性。在 WITH 子句中,我们为全新的流(主题)定义了分区数。在 GROUP BY 子句中 - 对于传入的消息,以便能够定义向哪个分区发送消息。

我们创建了一个包含 5 个分区的流。假设我们有带有 6 个唯一用户 ID 的消息。在这种情况下,消息将如何分布在这 5 个分区上?

PARTITIONS是Kafka的topic分区数

PARTITION BY 定义记录生产过程中使用哪个kafka message key

Let's imagine that we have messages with 6 unique userid. In this case how will messages be distributed over that 5 partitions

通过 Kafka 的 DefaultPartioner class