【问题标题】:Does producer and consumer need to specify partition生产者和消费者是否需要指定分区
【发布时间】:2016-06-06 04:38:22
【问题描述】:

我们计划有一个生产者(Java rest api) 并且消费者(Java客户端)运行在多台机器上,所有消费者都属于同一个消费者组。

1) 在这种情况下,如果我在生产者发布消息期间未指定分区,其中 Kafka 写入随机/默认分区...

2)当消费者检索消息时,如果我不提及分区,我会传递主题名称..并将偏移量提交给 Kafka 服务器..

如果我有一个消费者群体,这是一种好方法吗???

3) 我是否需要 Kafka 休息代理,据我了解,这不是必需的,因为我使用的是 Java 客户端..如果我错了,请纠正我...请让我知道我会得到什么好处如果我必须在这里使用 Kafka 休息代理....

【问题讨论】:

    标签: apache-kafka kafka-consumer-api kafka-producer-api


    【解决方案1】:

    从生产者的角度来看,如果记录没有任何键,生产者将在主题的分区之间以循环方式插入记录。 从消费者的角度来看,如果任何消费者可以处理来自该主题的任何记录,则无需指定分区,如果您实际上甚至不必提交偏移量,客户端可以使用@987654323 为您完成@。

    是的,如果你有 1 个消费者组,你可以添加多个消费者并平衡组之间的负载(这取决于组中消费者的数量和分区的数量)。

    3)使用java客户端时不需要kafka rest代理,此外(如果我没记错的话)kafka rest代理依赖于模式注册表,所以你必须同时运行两者。

    【讨论】:

    • 1) 在我的情况下,我必须手动提交,因为我只想在成功处理消息时提交......一旦消费者阅读了消息,自动提交将提交......如果我'请纠正我'我错了...2)我可以根据我拥有的消费者数量提前提到Kafka中的分区吗..如果是的话如何3)我可以在每个消费者中使用多个线程来读取和处理消息,以便我可以处理更多消息每个消费者都不是一条消息......在这种情况下,设置偏移量时有什么问题吗???
    • 在一个消费者组中,每个消费者都有自己的分区,因此提交偏移量应该始终是安全的,您需要为每个消费者创建 1 个线程,而不是在线程之间共享消费者。只需手动提交同步或异步并禁用自动提交。
    • 想知道为什么我们不应该在消费者中创建多个线程......无论如何,Kafka 甚至将线程视为消费者并为分区运行重新平衡......我的意思是如果我有 4 个分区和 2 个消费者。 .如果我在每个消费者中有2个线程..所以总共有4个线程,Kafka将每个分区分配给每个线程..如果我错了,请纠正我..我坚持使用多个线程的原因是我可以处理 4 条消息,即使我有两个消费者...请让我知道这种方法是否存在瓶颈..cos 如果我想一次处理 20 条消息,我需要创建 20 个消费者
    • 原因是新的consumer是单线程的,想了解更多可以看这篇博客confluent.io/blog/…
    • 我说的是当我说消费者它是一个应用程序并将创建多个线程来创建多个 Kafkaconsumer 对象并且一切都在单独的线程中运行...请参阅stackoverflow.com/questions/32470720/…
    猜你喜欢
    • 1970-01-01
    • 2018-02-05
    • 1970-01-01
    • 2013-11-07
    • 2019-10-16
    • 2011-07-23
    • 2011-12-16
    • 2019-06-19
    • 1970-01-01
    相关资源
    最近更新 更多