Java中的Apache Kafka消费者程序

时间:2014-07-21 06:49:48

标签: java multithreading apache-kafka

我对Apache kafka很新。我有一个任务是编写一个消费者来消费来自主题的消息。以下是我的疑问:

1)我应该通过明确提供主题名称(通过将参数作为参数传递给main方法)来告诉我的消费者Java程序,还是有任何方法可以自动发现主题?

2)我在某处读到消​​费者程序应该是多线程的,并且经过这个链接https://cwiki.apache.org/confluence/display/KAFKA/Consumer+Group+Example之后,我认为它正在创建用于从单个主题读取的线程数。我认为多线程意味着我的消费者程序应该产生与主题一样多的线程。如果我必须从3个主题中读取消息,那么我是否需要针对每个主题启动3个消费者计划?我可以在单个程序中做同样的事吗?请澄清。

3)我读到有两种类型的消费者计划:Simple and High level。不知道要写哪一个。

请帮助我开始工作。如果提供的源代码很少,我们将不胜感激。

如果我无法以可理解的方式处理这些事情,我道歉。

1 个答案:

答案 0 :(得分:0)

1)从Kafka集群获取主题列表可能是一项棘手的工作,因为没有这样的直接api可用。最好的办法是查询zookeeper,因为Kafka使用它来维护它的所有状态,{{ 3}}。 您可以阅读this links explains about the zookeeper data structure链接进行类似的讨论

2)该示例假设您将使用它来从给定主题获取数据,您可能会尝试创建主题列表并循环浏览它们以查看它是如何发生的,例如

     for(String topic : topicList) {
         new ConsumerGroupExample(zooKeeper, groupId, topic).run(threads);
     }

但不确定这一点的确切结果,如果你能分享你的发现那就太棒了

3)根据您的使用案例,取决于您对主题的控制程度。高级别会进行大量的簿记和错误处理,但不允许对主题进行细粒度访问,例如多次读取相同的消息,消耗特定的消息子集等,因为所有这些功能都是由简单的消费者提供的,但是您需要处理主题偏移管理,经纪人和领导者检测等案件。
您应该仔细查看他们的供应商文档中的内容,以便对此进行深入的了解。