当前位置: 首页 > 知识库问答 >
问题:

Kafka消费者架构设计:java插件或外部客户端

何向荣
2023-03-14

我正在为kafka集群的数据使用者编写一个解决方案(使用kafka的泊坞站),但我仍然需要决定如何编码它:

    < li >用本地语言Kafka开发:java,其中官方网站和git repo提供了示例,https://github . com/Apache/Kafka/tree/trunk/examples/src/main/Java/Kafka/examples < li >在以另一种语言(https://cwiki.apache.org/confluence/display/KAFKA/Clients,语)提供的另一个客户端中,例如Node.js

关键是我知道如何用两种语言编写解决方案,但我必须决定必须考虑哪一种:

  • 真正的性能消耗Kafka消息而不做瓶颈。(我的第一印象是,用Kafka构建的相同核心语言编写everthing将减少过载),但我不太确定这一点。
  • 在解决方案的设计方面(保持语言、代码样式的一致性和可扩展性)。整个Web界面,其余服务以及数据持久性都是在节点中开发的.js客户端都是在javascript / HTML5中开发的。

这是针对 ubuntu 服务器,在完全多克化的环境中,我使用 Node.js作为 Web 服务和连接模块的核心语言。我仍然没有调侃 kafka 客户端,而是使用默认选项:

import org.apache.kafka.clients.consumer.KafkaConsumer;
... 
props = ...
KafkaConsumer consumer = new KafkaConsumer<>(props);
var kafka = require('kafka-node');
...
client = ....
var consumer = new kafka.Consumer( client, [{ topic: 'topicVehicle' }], { autoCommit: true });

我必须处理用不同语言(java、nodejs…可能是python)在不同层维护代码的问题,我想知道哪种解决方案更合适。

共有1个答案

訾渝
2023-03-14

我的看法是,出于以下几个原因,您不希望将 Kafka 使用者创建为 Kafka 插件:

  • 主要原因:创建独立的消费者允许您根据需要,通过添加或删除同一消费者组的消费者实例来扩展它并根据负载进行扩展,让Kafka在这些消费者实例之间重新分配用于处理的可用分区

其他原因:

  • 插件通常是扩展您为-Kafka编写插件的任何功能的东西,在这种情况下
  • Kafka作为分布式消息系统的最大优势是您可以让许多独立的消费者各自做自己的事情,根据需要来来去去
  • 这些消费者的创建和部署不应与Kafka(或其插件)的部署相结合-您应该能够添加/删除不依赖于Kafka本身的消费者

现在,如果您正在开发某种新型的连接器或其他消费者,它实际上更像是一个框架/工具,将被其他消费者/生产者使用-将其开发为Kafka的插件是有意义的

 类似资料:
  • 我在kafka消费者文档中看到了这个注释-

  • 我有一个Kafka代理,有多个主题,每个主题都有一个分区。 我有一个消费者,它可以很好地使用主题中的消息 我的问题是,我需要通过增加分区的数量来提高消息队列的吞吐量,比如说,我在一个主题上有四个分区,有没有一种方法可以让我编写四个消费者,每个消费者都指向该主题上的各个分区??? }

  • 我刚接触Kafka,很少阅读教程。我无法理解使用者和分区之间的关系。 请回答我下面的问题。 > 消费者是否由ZK分配到单个分区,如果是,如果生产者将消息发送到不同的分区,那么其他分区的消费者将如何使用该消息? 我有一个主题,它有3个分区。我发布消息,它会转到P0。我有5个消费者(不同的消费者群体)。所有消费者都会阅读P0的信息吗?若我增加了许多消费者,他们会从相同的P0中阅读信息吗?如果所有消费者

  • Flink kafka消费者有两种类型的消费者,例如: 这两个消费者层次结构扩展了相同的类。我想知道维护编号类背后的设计决策是什么?我们什么时候应该使用其中一种? 我注意到带有数字后缀的类有更多的特性(例如ratelimiting)。 https://github.com/apache/flink/blob/master/flink-connectors/flink-connector-kafka

  • 我正在尝试让 kafka 消费者获取在 Java 中生成并发布到主题的消息。我的消费者如下。 consumer.java 当我运行上面的代码时,我在控制台中什么也看不到,屏幕后面的java producer程序正在‘AATest’主题下不断地发布数据。另外,在动物园管理员控制台中,当我尝试运行上面的consumer.java时,我得到了以下行 此外,当我运行指向 AATest 主题的单独控制台使用

  • 是否有一种方法以编程方式访问和打印使用者滞后偏移,或者说使用者读取的最后一条记录的偏移与某个生产者写入该使用者分区的最后一条记录的偏移之间的位置差。 要知道我的最终目标是将这个值发送到prometheus进行监视,我应该在上面添加哪些语句来得到滞后偏移值?