我是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)
)
我的代码意味着什么?
答案 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.reset
和enable.auto.commit
的含义”
使用auto.offset.reset
配置,可以在以下情况下引导消费者(作为消费者组的一部分)的行为:消费者组从不消费和提交特定主题,或者上一次从该消费者提交偏移量组已删除(例如,通过清除策略)。
Kafka主题分区中的每条消息都有一个唯一的标识符,即offset
。每个Kafka分区的偏移量是唯一的。使用者通常会在消耗的主题的每个分区上重新提交偏移量。这样,消费者就可以避免重复阅读。
想象一下,您是第一次阅读某个主题的消费者(或者如果您更改了消费者组名称)。因此,消费群体从未承诺过任何补偿。根据{{3}},您可以在配置为auto.offset.reset
的以下行为之间进行选择:
最早的:将偏移量自动重置为最早的偏移量
latest:自动将偏移量重置为最新的偏移量
无:如果未找到消费者组的先前偏移量,则会向消费者抛出异常
其他任何地方:向消费者抛出异常。
默认设置为latest
。
如上所述,在使用来自Kafka的消息时,考虑偏移量和它们的提交至关重要。将配置enable.auto.commit
设置为true
时,使用方偏移量将在后台自动提交。
在enable.auto.commit中,您将找到一个很好的示例,说明如何使用以下方法在Consumer Client中手动提交偏移量
KafkaConsumer<String, String> consumer = new KafkaConsumer<>(props);
consumer.commitSync();
再次强调偏移管理在消费者客户端中的重要性,值得阅读整个Java Docs描述或JavaDocs of KafkaConsumer。