我目前正在探索Kafka,作为一个简单问题的初学者。
将有一个生产者向一个主题推送消息,但将有n个spark应用程序的消费者从kafka发送消息并插入到数据库中(每个消费者插入到不同的表中)。
是否有可能消费者会不同步(例如消费者的某些部分会停机很长一段时间),然后一个或多个消费者不会处理消息并插入到表中?
假设代码总是正确的,在按摩数据时不会出现异常。重要的是每条消息只处理一次。
我的问题是,Kafka 是为我们处理这部分,还是我们必须编写一些其他代码来确保这种情况不会发生。
Kafka的设计使生产者和消费者脱钩。消费者将尽可能快地阅读,而消费者也可以尽可能快的生产。
消费者可以被组织成“消费者组”,您可以设置它,以便多个消费者可以从一个组中读取,也可以设置它,以便单个消费者从自己的组中读取。
如果您有一个消费者对一个组,您(取决于您的确认策略)应该能够确保每个消息只读取一次(每个消费者)。
否则,如果您想让多个消费者从同一个组中读取信息,同样的事情,但是消息只被n个消费者中的一个读取一次。
您可以对消费者进行分组(请参阅group.id
config),并且分组的消费者在他们之间拆分主题的分区。一旦一个消费者删除,该组中的另一个消费者将接管被删除的消费者读取的分区。
然而,可能存在一些问题:当消费者读取分区时,它将偏移提交回Kafka,如果消费者在处理接收到的数据后但在提交偏移之前删除,其他消费者将从最新的可用偏移开始读取。幸运的是,您可以管理偏移如何提交的策略(请参阅消费者的设置enable.auto.commit
、auto.offset.reset
等)
Kafka 和 Spark 流式处理指南提供了有关如何管理偏移量的一些解释和可能的策略。
我刚接触Kafka,很少阅读教程。我无法理解使用者和分区之间的关系。 请回答我下面的问题。 > 消费者是否由ZK分配到单个分区,如果是,如果生产者将消息发送到不同的分区,那么其他分区的消费者将如何使用该消息? 我有一个主题,它有3个分区。我发布消息,它会转到P0。我有5个消费者(不同的消费者群体)。所有消费者都会阅读P0的信息吗?若我增加了许多消费者,他们会从相同的P0中阅读信息吗?如果所有消费者
Flink kafka消费者有两种类型的消费者,例如: 这两个消费者层次结构扩展了相同的类。我想知道维护编号类背后的设计决策是什么?我们什么时候应该使用其中一种? 我注意到带有数字后缀的类有更多的特性(例如ratelimiting)。 https://github.com/apache/flink/blob/master/flink-connectors/flink-connector-kafka
关于KafkaConsumer(>=0.9),我在尝试实现满足自己需求的解决方案时遇到了一些严重的问题。 假设我有一个函数,它只能从一个Kafka主题中读取n条消息。 例如:-->获取主题中的下5条kafka消息。 所以,我有一个类似这样的循环。用实际正确的参数编辑。在本例中,使用者的max参数设置为1,因此实际循环只循环一次。不同的消费者(他们中的一些人迭代了许多消息)共享一个抽象的父亲(这一个
是否有一种方法以编程方式访问和打印使用者滞后偏移,或者说使用者读取的最后一条记录的偏移与某个生产者写入该使用者分区的最后一条记录的偏移之间的位置差。 要知道我的最终目标是将这个值发送到prometheus进行监视,我应该在上面添加哪些语句来得到滞后偏移值?
我是Kafka的新手,我有一个使用Java Apache Camel库实现的Kafka消费者。我发现的问题是-消费者花了很长的时间(>15分钟)来处理很少的消息-这对于我们的用例来说是很好的。 需要一些配置帮助,因为相同的消息会在15分钟后重新发送,如果在15分钟内没有处理(我相信线程控制不会返回)。我想这可能是默认间隔,不确定这是哪一个属性。 那么,我必须在哪里修复配置 生产者级别,以便它不重新
我对Kafka有一个概念上的问题。 我们有许多机器在一个主题上充当消费者,有许多分区。这些机器运行在不同的硬件设置上,将会有比其他机器具有更高吞吐量的用户。 现在,使用者和一个或多个分区之间存在直接的相关性。