在Kafka

时间:2017-07-05 13:29:57

标签: apache-kafka kafka-consumer-api

我是Kafka的新手,我不太了解Kafka配置的含义,任何人都可以解释为什么更容易理解!

这是我的代码:

 val kafkaParams = Map[String, Object](
  "bootstrap.servers" -> "master:9092,slave1:9092",
  "key.deserializer" -> classOf[StringDeserializer],
  "value.deserializer" -> classOf[StringDeserializer],
  "group.id" -> "GROUP_2017",
  "auto.offset.reset" -> "latest", //earliest or latest
  "enable.auto.commit" -> (true: java.lang.Boolean)
)

我的代码意味着什么?

3 个答案:

答案 0 :(得分:5)

我将向您解释其含义,但我强烈建议您阅读Kafka Web Site Configuration

"bootstrap.servers" -> "master:9092,slave1:9092"

基本上是Kafka群集配置:IP和端口。

 "key.deserializer" -> classOf[StringDeserializer]
 "value.deserializer" -> classOf[StringDeserializer]

This SO回答解释目的是什么。

"group.id" -> "GROUP_2017"

消费者进程将属于groupId。 groupId可以有多个使用者,而Kafka只会将一个使用者进程只分配给一个分区(用于数据消费)。如果消费者数量大于可用分区,则某些进程将处于空闲状态。

"enable.auto.commit" -> (true: java.lang.Boolean)

如果该标志为真,那么Kafka能够使用Zookeeper提交您从Kafka带来的消息,以保留最后一个'偏移量。它读了。当您需要生产系统的更强大的解决方案时,这种方法不是最好的方法,因为不能确保您带来的记录被正确处理(使用您在代码中编写的逻辑)。如果此标志为false,Kafka将不知道哪个是最后一个偏移读取,所以当您重新启动该过程时,它将开始阅读最早的#39;或者最新的' offset取决于您的下一个标志(auto.offset.reset)的值。最后,This Cloudera article详细解释了如何以适当的方式管理抵消。

"auto.offset.reset" -> "latest"

这个标志告诉Kafka在没有任何“提交”的情况下从哪里开始读取偏移量。然而。换句话说,它将从最早的'开始。或者来自最新的'如果你还没有在Zookeeper中保留任何偏移量(手动或使用enable.auto.commit标志)。

答案 1 :(得分:1)

Apache Kafka网站https://kafka.apache.org/documentation.html#newconsumerconfigs

上记录的完整的消费者配置参数集

答案 2 :(得分:1)

添加有关标题中提到的配置的更多详细信息:“不清楚卡夫卡中auto.offset.resetenable.auto.commit的含义”

auto.offset.reset

使用auto.offset.reset配置,可以在以下情况下引导消费者(作为消费者组的一部分)的行为:消费者组从不消费和提交特定主题,或者上一次从该消费者提交偏移量组已删除(例如,通过清除策略)。

Kafka主题分区中的每条消息都有一个唯一的标识符,即offset。每个Kafka分区的偏移量是唯一的。使用者通常会在消耗的主题的每个分区上重新提交偏移量。这样,消费者就可以避免重复阅读。

想象一下,您是第一次阅读某个主题的消费者(或者如果您更改了消费者组名称)。因此,消费群体从未承诺过任何补偿。根据{{​​3}},您可以在配置为auto.offset.reset的以下行为之间进行选择:

  • 最早的:将偏移量自动重置为最早的偏移量

  • latest:自动将偏移量重置为最新的偏移量

  • 无:如果未找到消费者组的先前偏移量,则会向消费者抛出异常

  • 其他任何地方:向消费者抛出异常。

默认设置为latest

Config Docs

如上所述,在使用来自Kafka的消息时,考虑偏移量和它们的提交至关重要。将配置enable.auto.commit设置为true时,使用方偏移量将在后台自动提交。

enable.auto.commit中,您将找到一个很好的示例,说明如何使用以下方法在Consumer Client中手动提交偏移量

KafkaConsumer<String, String> consumer = new KafkaConsumer<>(props);
consumer.commitSync();

再次强调偏移管理在消费者客户端中的重要性,值得阅读整个Java Docs描述或JavaDocs of KafkaConsumer