我最近开始学习Kafka,最后就问了这些问题。
>
消费者和流的区别是什么?对我来说,如果任何工具/应用程序消费来自Kafka的消息,那么它就是Kafka世界中的消费者。
流与Kafka有何不同?为什么需要它,因为我们可以使用消费者API编写自己的消费者应用程序,并根据需要处理它们,或者将它们从消费者应用程序发送到Spark?
我做了谷歌对此,但没有得到任何好的答案。抱歉,如果这个问题太琐碎了。
2021年1月更新:我写了一个关于卡夫卡基本原理的四部分的博客系列,我建议阅读这些问题。对于这个问题,请参阅关于处理基础的第3部分。
2018年4月更新:如今,您也可以使用ksqlDB,用于Kafka的事件流数据库,来处理您在Kafka中的数据。ksqlDB构建在Kafka的Streams API之上,它还提供了一流的流和表支持。
消费者API和流API有什么区别?
Kafka的Streams库(https://Kafka.apache.org/documentation/Streams/)构建在Kafka生产者和消费者客户端之上。Kafka Streams比普通客户端功能更强大,也更有表现力。
用Kafka Streams编写一个真实世界的应用程序要比用普通的Consumer要简单和快速得多。
下面是Kafka Streams API的一些特性,其中大部分不受消费者客户端的支持(这需要您自己实现缺失的特性,实质上是重新实现Kafka Streams)。
map
、filter
、reduce
等操作,以及(2)命令式处理器API,用于执行复杂事件处理(CEP);(3)您甚至可以将DSL和处理器API组合在一起。请参阅http://docs.confluent.io/current/Streams/introduction.html以获得对Kafka Streams API的更详细但仍然是高级别的介绍,这也将帮助您理解与较低级别的Kafka消费者客户机的区别。
除了Kafka流之外,您还可以使用流数据库ksqlDB处理Kafka中的数据。ksqlDB将其存储层(Kafka)与计算层(ksqlDB本身;它在这里使用Kafka流来实现其大部分功能)分开。它支持与Kafka Streams基本相同的特性,但您编写的是流式SQL语句,而不是Java或Scala代码。您可以通过UI、CLI和REST API与ksqlDB交互;它还有一个原生的Java客户端,以防你不想使用REST。最后,如果您不希望自己管理基础设施,ksqlDB可以作为一个完全管理的服务在Confluent Cloud中使用。
那么Kafka Streams API有什么不同,因为它也从Kafka中消费或生成消息给Kafka呢?
是的,Kafka Streams API既可以读取数据,也可以向Kafka写入数据。如果它支持Kafka事务,那么您可以例如从一个或多个主题读取一个或多个消息,如果需要,可选地更新处理状态,然后将一个或多个输出消息写入一个或多个主题--全部作为一个原子操作。
为什么需要它,因为我们可以使用消费者API编写自己的消费者应用程序,并根据需要处理它们,或者将它们从消费者应用程序发送到Spark?
是的,您可以编写自己的使用者应用程序--正如我提到的,Kafka Streams API使用Kafka使用者客户机(加上生产者客户机)本身--但您必须手动实现Streams API提供的所有独特功能。请看上面的列表,看看你“免费”得到的所有东西。因此,用户选择普通的消费者客户端而不是更强大的Kafka Streams库的情况很少见。
我是pyflink的新手。我正在尝试编写一个python程序来从kafka主题读取数据并将数据打印到标准输出。我按照链接Flink Python Datastream API Kafka Producer Sink Serializaion进行了操作。但由于版本不匹配,我一直看到NoSuchMethod odError。我添加了https://repo.maven.apache.org/maven
是否有一种方法以编程方式访问和打印使用者滞后偏移,或者说使用者读取的最后一条记录的偏移与某个生产者写入该使用者分区的最后一条记录的偏移之间的位置差。 要知道我的最终目标是将这个值发送到prometheus进行监视,我应该在上面添加哪些语句来得到滞后偏移值?
最近,在一次采访中,我被问到一个关于Kafka流的问题,更具体地说,面试官想知道为什么/什么时候您会使用Kafka流DSL而不是普通的Kafka消费者API来读取和处理消息流?我不能给出一个令人信服的答案,我想知道使用这两种流处理风格的其他人是否可以分享他们的想法/意见。多谢了。
我有一个Kafka代理,有多个主题,每个主题都有一个分区。 我有一个消费者,它可以很好地使用主题中的消息 我的问题是,我需要通过增加分区的数量来提高消息队列的吞吐量,比如说,我在一个主题上有四个分区,有没有一种方法可以让我编写四个消费者,每个消费者都指向该主题上的各个分区??? }
我正在为Kafka0.9.0.0做Kafka快速入门。 我让zookeeper在监听,因为我运行了 只有一个代理在处侦听,因为我运行了 我有一个制作人在主题“测试”上发帖,因为我跑了 当我运行旧的API使用者时,它通过运行 但是,当我运行新的API使用者时,我在运行时没有得到任何东西 是否可以使用新的API从控制台使用者订阅主题?我该怎么修好它?
我刚接触Kafka,很少阅读教程。我无法理解使用者和分区之间的关系。 请回答我下面的问题。 > 消费者是否由ZK分配到单个分区,如果是,如果生产者将消息发送到不同的分区,那么其他分区的消费者将如何使用该消息? 我有一个主题,它有3个分区。我发布消息,它会转到P0。我有5个消费者(不同的消费者群体)。所有消费者都会阅读P0的信息吗?若我增加了许多消费者,他们会从相同的P0中阅读信息吗?如果所有消费者