我正在为kafka集群的数据使用者编写一个解决方案(使用dockers for kafka),但我仍然需要决定如何编写它:
Kafka的母语是java,官方网站和git repo提供了例子,https://github.com/apache/kafka/tree/trunk/examples/src/main/java/kafka/examples
以另一种语言提供的另一个客户端,https://cwiki.apache.org/confluence/display/kafka/clients,例如node.js
关键是我知道如何用两种语言编写解决方案,但我必须决定要考虑哪种语言:
真正的性能消费Kafka的信息,而不是瓶颈(我的第一印象是,用同一种核心语言kafka is build编写所有代码都会减少过载),但我并不确定这一点。
在解决方案的设计方面(保持语言、代码风格的一致性和可扩展性)。整个web界面、rest服务和数据持久性都是在node.js中开发的,客户端是在javascript/html5中开发的。
这是一个ubuntu服务器,在一个完全对接的环境中,我使用node.js作为web服务和连接模块的核心语言。我仍然没有tunning kafka客户端,而是使用默认选项:
java(使用kafkaconsumer)
import org.apache.kafka.clients.consumer.KafkaConsumer;
...
props = ...
KafkaConsumer consumer = new KafkaConsumer<>(props);
node.js(使用kafka node npm lib)
var kafka = require('kafka-node');
...
client = ....
var consumer = new kafka.Consumer( client, [{ topic: 'topicVehicle' }], { autoCommit: true });
我必须处理用各种语言(java、nodejs。。。可能是python),我想知道哪种解决方案更合适。
1条答案
按热度按时间xxslljrj1#
我的看法是,您不想将您的kafka消费者创建为kafka插件,原因如下:
主要原因:创建独立使用者允许您根据负载进行扩展,根据需要,通过添加或删除同一使用者组的使用者示例,让kafka在这些使用者示例之间重新分配可用分区进行处理
其他原因:
插件通常扩展了你为Kafka编写的插件的功能
kafka作为一个分布式消息系统的最大优点是,您可以有许多独立的消费者,每个人都在做自己的事情,来去自由
这些使用者的创建和部署不应与kafka(或其插件)的部署结合在一起—您应该能够添加/删除不依赖于kafka本身的使用者
现在,如果您正在开发某种新型的连接器或其他使用者,它们实际上更像一个框架/工具,将被其他使用者/生产者使用,那么将其开发为kafka的插件是有意义的