Kafka连接partition.duration.ms和刷新大小之间的属性关系?

时间:2018-10-11 13:09:17

标签: apache-kafka apache-kafka-connect

有人可以在以下配置中解释partition.duration.ms和flushsize的重要性。 设置这些属性的背后应该怎么想?

"connector.class": "io.confluent.connect.s3.S3SinkConnector",
  "s3.region": "eu-central-1",
  "partition.duration.ms": "1000",
  "topics.dir": "root_bucket",
  "flush.size": "10",
  "topics": "TEST_SRV",
  "tasks.max": "1",
  "s3.part.size": "5242880",
  "timezone": "UTC",
  "locale": "US",
  "key.converter.schemas.enable": "true",
  "format.class": "io.confluent.connect.s3.format.json.JsonFormat",
  "partitioner.class": "io.confluent.connect.storage.partitioner.TimeBasedPartitioner",
  "schema.generator.class": "io.confluent.connect.storage.hive.schema.DefaultSchemaGenerator",
  "value.converter.schemas.enable": "false",
  "value.converter": "org.apache.kafka.connect.json.JsonConverter",
  "storage.class": "io.confluent.connect.s3.storage.S3Storage",
  "s3.bucket.name": "events-dev-s3",
  "key.converter": "org.apache.kafka.connect.storage.StringConverter",
  "path.format": "'year'-YYYY/'month'-MM/'day'-dd/'hour'-HH",
  "timestamp.extractor": "RecordField",
  "timestamp.field": "event_data.created_at"

2 个答案:

答案 0 :(得分:1)

  

1秒钟的分区持续时间没有意义,因为您已将分区程序设置为仅每小时进行一次分区。

将分区程序设置为仅按小时进行分区。

"path.format": "'year'-YYYY/'month'-MM/'day'-dd/'hour'-HH"

这会将目录结构的粒度设置为小时

以上配置会将输出文件(为每个1秒分区生成的文件)放入其适用的Hourly目录中。

I.E。每小时目录将包含该小时的所有数据(在这种情况下,所有每秒分区)

答案 1 :(得分:0)

分区持续时间确定基于时间的分区程序创建新“ path.format”的频率。对于您来说,1秒的分区持续时间是没有意义的,因为您已将分区程序设置为仅每小时进行一次分区。

然后刷新大小是一个给定文件中将存在多少个Kafka记录的上限


这些值背后的想法取决于主题的吞吐量以及在从S3而不是直接从Kafka读取记录之前,您愿意容忍多少延迟。

请注意,您需要为每次S3扫描付费,因此更高的刷新率和更少的总体文件将有助于节省金钱