Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Lambda for Java消费者收听MSK主题时出现问题_Lambda_Apache Kafka - Fatal编程技术网

Lambda for Java消费者收听MSK主题时出现问题

Lambda for Java消费者收听MSK主题时出现问题,lambda,apache-kafka,Lambda,Apache Kafka,我正在观察一个特殊的问题。 我用Java8构建了一个Lambda函数;它使用Kafka consumer api轮询MSK主题,即consumer.poll(5000)(我尝试过各种超时)。还有第二个Lambda函数,它是生产者并向同一主题发送消息。这两项功能都连接到MSK所在的VPC。 制片人工作得很好。我可以从EC2中看到运行Kafka console consumer的消息b。 但是消费者Lambda不工作,它只是给出超时 只有当我在EC2上同时运行lambda producer、Kafk

我正在观察一个特殊的问题。 我用Java8构建了一个Lambda函数;它使用Kafka consumer api轮询MSK主题,即consumer.poll(5000)(我尝试过各种超时)。还有第二个Lambda函数,它是生产者并向同一主题发送消息。这两项功能都连接到MSK所在的VPC。
制片人工作得很好。我可以从EC2中看到运行Kafka console consumer的消息b。 但是消费者Lambda不工作,它只是给出超时

只有当我在EC2上同时运行lambda producer、Kafka console consumer和lambda consumer时,消费者才会收到一些消息!!确切地说,生产者在一个循环中发送5条消息,EC2控制台消费者显示所有5条消息,但lambda消费者显示第3条或第4条消息

为什么会这样?这里可能存在什么问题,如何在lambda consumer中一致地获取消息

如果任何人有一个工作代码样本,我将非常感激

多谢各位


进一步更新:我已经安排了consumer函数,然后它将获得所有事件。我仍然有以下问题-1>为什么在我手动触发该功能时它没有收到消息?2> 我测试了一个用Python编写的消费者函数;这也没有得到任何信息。以下是python代码:

def lambda_handler(event, context):
bootstrap_servers = ["<msk bootstrap>"]
topicName = '<mp-topic-name>'

consumer = KafkaConsumer (topicName, group_id = 'test',bootstrap_servers = bootstrap_servers,auto_offset_reset = 'earliest', consumer_timeout_ms=5000)

for message in consumer:
      consumer.commit()
      print ("%s:%d:%d: key=%s value=%s" % (message.topic, message.partition,message.offset, message.key,message.value))
    
KafkaConsumer.close()         
return ("Processed")
def lambda_处理程序(事件、上下文):
引导\u服务器=[“”]
主题名称=“”
消费者=卡夫卡消费者(主题名称,组id='test',引导服务器=引导服务器,自动偏移量重置='earlime',消费者超时时间=5000)
消费者信息:
consumer.commit()
打印(“%s:%d:%d:key=%s value=%s”%(message.topic、message.partition、message.offset、message.key、message.value))
KafkaConsumer.close()
返回(“已处理”)

Java使用者的代码;这是一个普通的卡夫卡客户。从Lambda,当以预定方式运行时,它能够读取消息;但手动测试时不会

    try {
        KafkaConsumer<String, String> consumer = new KafkaConsumer<String, String>(props);

        consumer.subscribe(Arrays.asList(topicName));

        context.getLogger().log("Subscribed to topic " + topicName);
        
        int i = 0;
        ConsumerRecords<String, String> records = consumer.poll(5000);          
        
        for (ConsumerRecord<String, String> record : records) {
            context.getLogger().log("Message:::  offset = "+record.offset()+", key = "+record.key()+", value = "+record.value()+"\n");
        }
        context.getLogger().log("After messages");
    } catch (Exception e) {
        e.printStackTrace();
        context.getLogger().log("Exception: "+e.getMessage());
    }
试试看{
卡夫卡消费者=新卡夫卡消费者(道具);
consumer.subscribe(Arrays.asList(topicName));
context.getLogger().log(“订阅主题”+topicName);
int i=0;
消费者记录记录=消费者投票(5000);
对于(消费者记录:记录){
context.getLogger().log(“消息:::offset=“+record.offset()+”,key=“+record.key()+”,value=“+record.value()+”\n”);
}
context.getLogger().log(“在消息之后”);
}捕获(例外e){
e、 printStackTrace();
context.getLogger().log(“异常:+e.getMessage());
}

如果你能再坚持一个月左右就好了!AWS现在支持来自MSK和自管理kafka群集(甚至在AWS之外)的kafka事件源


您在问题中发布Python代码,并用java标记它。我错过了什么?嗨,艾布拉,谢谢你的检查。随着我的更新,当我按计划Lambda运行java消费者时,它现在正在工作。所以我的问题是->1)为什么Lambda中的java消费者在我手动运行它时没有收到任何消息?无论如何,它都在读取所有消息2)发布的python代码是为另一个消费者编写的,而这无法读取来自Kafka主题的消息(无论是否手动运行以获取预定的消息)。这会破坏基本的消息传递。为什么一个python代码不能从同一个主题中删除呢;它只是一个普通的卡夫卡消费者,没什么特别的。你有没有想过我用c#@sachabarber;没有找到任何答案。临时切换到使用SQS。是的,他们使用了;终于忍不住了:)