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

在Eclipse:PySpark中执行时无法查看kafka消费者输出

叶琦
2023-03-14

我在windows系统中安装了kafka和zookeeper。我已经启动了kafka和zookeeper服务器,创建了主题“javainuse-topic”,使用以下命令启动了producer和consumer

.\bin\windows\zookeeper-server-start.bat.\config\zookeeper.properties

.\bin\windows\kafka-server-start.bat.\config\server.properties

.\bin\windows\kafka-topics.bat--create-zookeeper localhost:2181-replication-factor 1-partitions 1-topic javainuse-topic

.\bin\windows\kafka-console-producer.bat--broker-list localhost:9092-topic javainuse-topic

.\bin\windows\kafka-console-consumer.bat--bootstrap-server localhost:9092-topic javainuse-topic--从开始

我能够成功地将数据从生产者传送到消费者。因此,我在eclipse中编写了下面的代码,并尝试在Local中执行它。但我无法在eclipse控制台中查看消费者数据。

import os
os.environ['PYSPARK_SUBMIT_ARGS'] = '--packages org.apache.spark:spark-streaming-kafka-0-8_2.11:2.3.0 pyspark-shell'

import sys
import time
from pyspark import SparkContext, SparkConf
from pyspark.streaming import StreamingContext
from pyspark.streaming.kafka import KafkaUtils


n_secs = 1
topic = "javainuse-topic"

conf = SparkConf().setAppName("KafkaStreamProcessor").setMaster("local[*]")
sc = SparkContext(conf=conf)
sc.setLogLevel("WARN")
ssc = StreamingContext(sc, n_secs)
    
kafkaStream = KafkaUtils.createDirectStream(ssc, [topic], {
                        'bootstrap.servers':'localhost:9092', 
                        'group.id':'javainuse-topic', 
                        'fetch.message.max.bytes':'15728640',
                        'auto.offset.reset':'largest'})
                        # Group ID is completely arbitrary

lines = kafkaStream.map(lambda x: x[1])
counts = lines.flatMap(lambda line: line.split(" ")).map(lambda word: (word, 1)).reduceByKey(lambda a, b: a+b)
counts.pprint()

ssc.start()
time.sleep(6) # Run stream for 10 minutes just in case no detection of producer
# ssc.awaitTermination()
ssc.stop(stopSparkContext=True,stopGraceFully=True)

共有1个答案

池俊茂
2023-03-14

您可以重试,但这次将auto.offset.reset设置为“最早”(如果使用的是旧使用者,则为“最小”)。

kafkaStream = KafkaUtils.createDirectStream(ssc, [topic], {
                        'bootstrap.servers':'localhost:9092', 
                        'group.id':'javainuse-topic', 
                        'fetch.message.max.bytes':'15728640',
                        'auto.offset.reset':'earliest'})
                        # Group ID is completely arbitrary
 类似资料:
  • 关于KafkaConsumer(>=0.9),我在尝试实现满足自己需求的解决方案时遇到了一些严重的问题。 假设我有一个函数,它只能从一个Kafka主题中读取n条消息。 例如:-->获取主题中的下5条kafka消息。 所以,我有一个类似这样的循环。用实际正确的参数编辑。在本例中,使用者的max参数设置为1,因此实际循环只循环一次。不同的消费者(他们中的一些人迭代了许多消息)共享一个抽象的父亲(这一个

  • 我指的是Kafka源代码连接器的Flink 1.14版本,代码如下。 我期待以下要求。 在最新的应用程序开始时,必须阅读Kafka主题的最新偏移量 在检查点上,它必须将消耗的偏移量提交给Kafka 重新启动后(当应用程序手动终止/系统错误时),它必须从最后提交的偏移量中选取,并且必须消耗使用者延迟,然后再使用新的事件提要 有了Flink新的KafkaConsumer API(KafkaSource

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

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

  • 我想在远程位置检查Kafka消费者的连接。 可以确定是否将使用者分配给分区。 在远程位置,我可以从Kafka代理获得有关该主题的详细信息。 但是消费者能否保证消费者能够收到消费者与主题分区匹配的消息?

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