Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/apache-kafka/3.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
Java 返回Kafka结果时的ArrayIndexOutOfBoundsException_Java_Apache Kafka_Talend - Fatal编程技术网

Java 返回Kafka结果时的ArrayIndexOutOfBoundsException

Java 返回Kafka结果时的ArrayIndexOutOfBoundsException,java,apache-kafka,talend,Java,Apache Kafka,Talend,我正在用Java开发一个自定义Talend组件来读取卡夫卡主题中的数据,我的目标是实时处理这些数据并将其写入文件 当我获得的数据不是太大时,我的Java代码正在工作,否则我会出现以下错误: 我知道我发送的数据太大,所以我有两个问题: 有没有办法增加我发送的数据的最大大小 如何优化我的代码:在下面的代码中,我能够计算每次轮询中从卡夫卡获得的行数,我认为我可以分割数据(例如10/10),但问题是我只能使用“return”一次,这就是为什么我在循环之后发送所有内容 以下是我的Java代码: @P

我正在用Java开发一个自定义Talend组件来读取卡夫卡主题中的数据,我的目标是实时处理这些数据并将其写入文件

当我获得的数据不是太大时,我的Java代码正在工作,否则我会出现以下错误:

我知道我发送的数据太大,所以我有两个问题:

  • 有没有办法增加我发送的数据的最大大小
  • 如何优化我的代码:在下面的代码中,我能够计算每次轮询中从卡夫卡获得的行数,我认为我可以分割数据(例如10/10),但问题是我只能使用“return”一次,这就是为什么我在循环之后发送所有内容
以下是我的Java代码:

@Producer
    public Record next() {
        while (true){
            ConsumerRecords<String, Object> records = consumer.poll(Duration.ofMillis(10));
            System.out.println("new poll");
            ArrayList<String> elements = new ArrayList<>();
            Integer count = 0;
            for (ConsumerRecord<String, Object> record : records) {
                count ++;
                String current_line = record.value().toString();
                JSONObject jsonObject = new JSONObject(current_line);
                 test = jsonObject.get("type").toString();
                 elements.add(current_line);
                 System.out.println("in= " + test);
        }
            System.out.println("count = " + count.toString());

             if (elements.size()>0) {
                 return builderFactory.newRecordBuilder().withString("name", elements.toString()).build();
             }
            consumer.commitAsync();
        }
    }
@制作人
公共记录下一页(){
while(true){
ConsumerRecords记录=consumer.poll(持续时间:百万分之十);
System.out.println(“新投票”);
ArrayList元素=新的ArrayList();
整数计数=0;
对于(消费者记录:记录){
计数++;
字符串current_line=record.value().toString();
JSONObject JSONObject=新JSONObject(当前_行);
test=jsonObject.get(“type”).toString();
元素。添加(当前_行);
System.out.println(“in=”+测试);
}
System.out.println(“count=“+count.toString());
if(elements.size()>0){
返回builderFactory.newRecordBuilder();
}
consumer.commitAsync();
}
}
谢谢你的帮助

问候,


Thomas

编辑内存和JVM设置 要在运行时和启动Talend Studio时提高性能,可以编辑.ini文件中的内存设置

默认情况下,.ini文件设置以下JVM参数:

--launcher.XXMaxPermSize512m -vmargs -Xms64m -Xmx768m -Xdock:icon=../Resources/talend.icns -XstartOnFirstThread -文件编码=UTF-8

64位系统上有8 GB的可用内存,最佳设置可以是:

--launcher.XXMaxPermSize512m -vmargs -Xms2014m -Xmx4096m -XstartOnFirstThread
-Dfile.encoding=UTF-8

您好,托马斯,您是否尝试增加JVM参数并查看问题是否持续谢谢@AmineBenKhelifa,您是对的,增加RAM内存解决了问题,谢谢:)您可以将主题标记为已解决,如果这是解决方案?