<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic Re: ESB Route data buffering in Talend Studio</title>
    <link>https://community.qlik.com/t5/Talend-Studio/ESB-Route-data-buffering/m-p/2302572#M74541</link>
    <description>&lt;P&gt;Hi Yuri&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;You can use cThrottler to gather data and only send them every x data or x time to your job.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;As JDBC is much performing you could try to get the transformed data back to ESB route then in a cProcessor/java bean use a JDBC library to connect to your DB and send it data. I already do it (in pure ESB) and it works fine.&lt;/P&gt;</description>
    <pubDate>Tue, 19 Dec 2017 16:32:02 GMT</pubDate>
    <dc:creator>Loko</dc:creator>
    <dc:date>2017-12-19T16:32:02Z</dc:date>
    <item>
      <title>ESB Route data buffering</title>
      <link>https://community.qlik.com/t5/Talend-Studio/ESB-Route-data-buffering/m-p/2302569#M74538</link>
      <description>&lt;P&gt;Hello everyone&lt;/P&gt; 
&lt;P&gt;Using Talend ESB 6.4.1 (free version) and Talend DI 6.4.1 (free version).&lt;/P&gt; 
&lt;P&gt;&amp;nbsp;&lt;/P&gt; 
&lt;P&gt;I have ESB Route which is getting messages from a message queue (RabbitMQ).&lt;/P&gt; 
&lt;P&gt;It then calls a DI Job to process the messages retrieved from the Route.&lt;/P&gt; 
&lt;P&gt;&amp;nbsp;&lt;/P&gt; 
&lt;P&gt;Sadly the performance is poor when messages flow 1-by-1, without batching.&lt;/P&gt; 
&lt;P&gt;The Job commits them to the database which is slow when using 1 row insert/commit per invocation, I get ~10 messages per second stored in database.&lt;/P&gt; 
&lt;P&gt;&amp;nbsp;&lt;/P&gt; 
&lt;P&gt;I have tested custom Java JDBC program doing the same work against the database using batching and performance is much better (~1000-2000 messages per second).&lt;/P&gt; 
&lt;P&gt;&amp;nbsp;&lt;/P&gt; 
&lt;P&gt;I would like to somehow buffer the incoming messages data inside ESB Route (or inside invoked Job?) so that I only invoke the Job every N-messages - as a batch.&lt;/P&gt; 
&lt;P&gt;&amp;nbsp;&lt;/P&gt; 
&lt;P&gt;It does not appear possible to call Java code in ESB Route to create a shared object (such as Java HashMap or ArrayList) to buffer incoming data to be made available to Job.&lt;/P&gt; 
&lt;P&gt;&amp;nbsp;&lt;/P&gt; 
&lt;P&gt;Does anyone have any suggestions how to implement this solution to achieve "batched commit" performance ?&lt;/P&gt; 
&lt;P&gt;&amp;nbsp;&lt;/P&gt; 
&lt;P&gt;Thanks&lt;/P&gt; 
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Sat, 16 Nov 2024 09:09:08 GMT</pubDate>
      <guid>https://community.qlik.com/t5/Talend-Studio/ESB-Route-data-buffering/m-p/2302569#M74538</guid>
      <dc:creator>Anonymous</dc:creator>
      <dc:date>2024-11-16T09:09:08Z</dc:date>
    </item>
    <item>
      <title>Re: ESB Route data buffering</title>
      <link>https://community.qlik.com/t5/Talend-Studio/ESB-Route-data-buffering/m-p/2302570#M74539</link>
      <description>&lt;P&gt;Hi,&lt;/P&gt; 
&lt;P&gt;Could you please also post your job design screenshots on forum so that we can get more information about your job requirement and re-direct it to our ESB experts if need be?&lt;/P&gt; 
&lt;P&gt;Best regards&lt;/P&gt; 
&lt;P&gt;Sabrina&lt;/P&gt;</description>
      <pubDate>Wed, 25 Oct 2017 08:01:12 GMT</pubDate>
      <guid>https://community.qlik.com/t5/Talend-Studio/ESB-Route-data-buffering/m-p/2302570#M74539</guid>
      <dc:creator>Anonymous</dc:creator>
      <dc:date>2017-10-25T08:01:12Z</dc:date>
    </item>
    <item>
      <title>Re: ESB Route data buffering</title>
      <link>https://community.qlik.com/t5/Talend-Studio/ESB-Route-data-buffering/m-p/2302571#M74540</link>
      <description>&lt;P&gt;thank you for your interest.&lt;/P&gt; 
&lt;P&gt;&amp;nbsp;&lt;/P&gt; 
&lt;P&gt;Requirement is to read messages from RabbitMQ and store them into PostgreSQL database with high performance, i.e. 1000+ messages per second sustained.&lt;/P&gt; 
&lt;P&gt;&amp;nbsp;&lt;/P&gt; 
&lt;P&gt;the design flow is very simple 2 step process using ESB Route + Job.&lt;/P&gt; 
&lt;P&gt;&amp;nbsp;&lt;/P&gt; 
&lt;P&gt;There is a Route which uses Camel to read messages from RabbitMQ.&lt;/P&gt; 
&lt;P&gt;The received message is then flowing via route to a Job which inserts the message (JSON) into a PostgreSQL database table as a single row.&lt;/P&gt; 
&lt;P&gt;&amp;nbsp;&lt;/P&gt; 
&lt;P&gt;The performance is poor due to single-row transaction, no batching.&lt;/P&gt; 
&lt;P&gt;&amp;nbsp;&lt;/P&gt; 
&lt;P&gt;What I need to do is to batch the incoming RabbitMQ messages into groups of (say) 1000 and send them to the database as a single batch followed by commit.&lt;/P&gt; 
&lt;P&gt;I also need to use a timer to commit received messages every N-seconds (for those times when not many messages arrive in groups, low period of activity).&lt;/P&gt; 
&lt;P&gt;&amp;nbsp;&lt;/P&gt; 
&lt;P&gt;I tried using fast job invocation which improved performance but still only about 10 messages per second is all I can achieve.&lt;/P&gt; 
&lt;P&gt;&amp;nbsp;&lt;/P&gt; 
&lt;P&gt;Talend DI Job has ability to batch (Batch Insert option for PostgreSQL) and it generates correct performant code (uses JDBC .addBatch() and .executeBatch() methods).&lt;/P&gt; 
&lt;P&gt;Alas the job only gets 1 message at a time from the Route so it can not use the batching effectively (batch size ends up = 1 row).&lt;/P&gt; 
&lt;P&gt;&amp;nbsp;&lt;/P&gt; 
&lt;P&gt;Just as a rough prototype, I hand coded a Java program which reads messages from RabbitMQ, one at a time, and uses same JDBC .addBatch() and .executeBatch() methods followed by database Commit per batch and I am easily getting &amp;gt;1000-2000 messages per second stored into PostgreSQL database.&lt;/P&gt; 
&lt;P&gt;&amp;nbsp;&lt;/P&gt; 
&lt;P&gt;I was thinking of employing a similar addBatch/executeBatch/Commit mechanism inside ESB Route but alas there is no way of calling a Java program from Route to do the data buffering. Buffering inside the Job appears to be problematic or at least very code intensive, particularly because I need to use a timer to commit any outstanding messages every N-seconds or 1000-messages - whichever occurs first.&lt;/P&gt; 
&lt;P&gt;&amp;nbsp;&lt;/P&gt; 
&lt;P&gt;I hope this clarifies my current situation.&lt;/P&gt; 
&lt;P&gt;&amp;nbsp;&lt;/P&gt; 
&lt;P&gt;Many thanks&lt;/P&gt; 
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Thu, 26 Oct 2017 00:06:02 GMT</pubDate>
      <guid>https://community.qlik.com/t5/Talend-Studio/ESB-Route-data-buffering/m-p/2302571#M74540</guid>
      <dc:creator>Anonymous</dc:creator>
      <dc:date>2017-10-26T00:06:02Z</dc:date>
    </item>
    <item>
      <title>Re: ESB Route data buffering</title>
      <link>https://community.qlik.com/t5/Talend-Studio/ESB-Route-data-buffering/m-p/2302572#M74541</link>
      <description>&lt;P&gt;Hi Yuri&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;You can use cThrottler to gather data and only send them every x data or x time to your job.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;As JDBC is much performing you could try to get the transformed data back to ESB route then in a cProcessor/java bean use a JDBC library to connect to your DB and send it data. I already do it (in pure ESB) and it works fine.&lt;/P&gt;</description>
      <pubDate>Tue, 19 Dec 2017 16:32:02 GMT</pubDate>
      <guid>https://community.qlik.com/t5/Talend-Studio/ESB-Route-data-buffering/m-p/2302572#M74541</guid>
      <dc:creator>Loko</dc:creator>
      <dc:date>2017-12-19T16:32:02Z</dc:date>
    </item>
  </channel>
</rss>

