在Bluemix上构建Apache Kafka消息传递消费者


Message Hub服务开启Bluemix是基于Apache Kafka,它是一个快速,可伸缩和持久的实时消息传递引擎。对于开发人员来说,有Java,Node和REST API来利用Kafka。昨天我写了一篇关于如何写一个简单的Kafka producer在node.js中。本文介绍了对应的对象--卡夫卡消费者。

要了解消费者在Kafka中的工作方式,我建议阅读Kafka documentation本质上,您定义具有潜在多个消费者实例的消费者组。每个组只有一个实例接收一个特定消息。为了扩展,您可以简单地增加使用者实例的数量。在Kafka中,每个容器实例都有自己的分区,从该分区接收特定主题的消息(按正确的顺序)。但是,由于Message Hub在当前beta状态下只支持一个分区,因此您还不能使用此功能。

下面的使用者代码也是对示例稍作修改的版本Node.js chat application我同事尼尔·威顿寄来的。我将生产者代码和消费者代码分开,并删除了聊天代码。

通过传入消费者组名,消费者实例id(映射到Bluemix Cloud Foundry application instance_id)和一个偏移量来定义要读取哪些消息,消费者实例在第87行创建。第66ff行中的代码显示了使用者如何在某个时间间隔上轮询更新,并在第69行读取消息(作为批处理)。为了确保其他使用者实例在特定使用者实例关闭时接收到消息,您需要在第125行告诉这个Kafka。

您可以在本地或Bluemix上运行消费者。要在Bluemix上运行它,请创建一个Bluemix node.js应用程序,添加Message Hub服务并从项目的根目录执行这些命令。

cf login
cf push <mykafkaconsumer>

要在本地运行使用者,请执行以下命令。

npm install
node app.js <message_hub_rest_endpoint> <message_hub_api_key>

为了测试使用者,您还需要运行生产者,如前面所述article。两者都需要使用相同的Message Hub实例。这里是生产者和消费者在本地运行的截图。