如何降低Kafka Producer的写入速度?

时间:2019-11-01 08:30:19

标签: apache-spark apache-kafka spark-structured-streaming

我用火花以这种方式将数据写入kafka。

  

df.write()。格式(“ kafka”)。 save()

我可以控制对kafka的写入速度以避免对kafka的压力吗? 有一些有助于降低速度的选项吗?

2 个答案:

答案 0 :(得分:0)

我认为将linger.ms设置为非零值会有所帮助。因为它控制发送当前批次之前等待其他消息的时间。代码如下所示

df.write.format("kafka").option("linger.ms", "100").save()

但这确实取决于很多事情。如果您的Kafka足够“大”并且配置正确,那么我就不必担心速度。毕竟,kafka旨在应付这种情况(交通高峰)。

答案 1 :(得分:0)

通常,结构化流默认会尝试尽可能快地处理数据。每个源中都有允许控制处理速率的选项,例如File源中的maxFilesPerTrigger和Kafka源中的maxOffsetsPerTrigger。

val streamingETLQuery = cloudtrailEvents
  .withColumn("date", $"timestamp".cast("date") // derive the date
  .writeStream
  .trigger(ProcessingTime("10 seconds")) // check for files every 10s
  .format("parquet") // write as Parquet partitioned by date
  .partitionBy("date")
  .option("path", "/cloudtrail")
  .option("checkpointLocation", "/cloudtrail.checkpoint/")
  .start()

val df = spark.readStream
  .format("text")
  .option("maxFilesPerTrigger", 1)
  .load("text-logs")

阅读以下链接以获取更多详细信息:

https://jaceklaskowski.gitbooks.io/spark-structured-streaming/spark-sql-streaming-KafkaSource.html https://jaceklaskowski.gitbooks.io/spark-structured-streaming/spark-sql-streaming-FileStreamSource.html https://databricks.com/blog/2017/01/19/real-time-streaming-etl-structured-streaming-apache-spark-2-1.html http://spark.apache.org/docs/latest/structured-streaming-programming-guide.html#input-sources http://spark.apache.org/docs/latest/structured-streaming-kafka-integration.html