Hi Raghu, thank you. I'm not sure though what to pass as an argument:
KafkaIO.read[String,String]() .withBootstrapServers(server) .withTopic(topic) .withKeyDeserializer(classOf[StringDeserializer]) .withValueDeserializer(classOf[StringDeserializer]) .withConsumerFactoryFn(new KafkaExecutor.ConsumerFactoryFn(????????????????)) .updateConsumerProperties(properties) .commitOffsetsInFinalize() .withoutMetadata() Regards Em ter, 18 de set de 2018 às 21:15, Raghu Angadi <rang...@google.com> escreveu: > Hi Eduardo, > > There another work around you can try without having to wait for 2.7.0 > release: Use a wrapper to catch exception from KafkaConsumer#poll() and > pass the wrapper to withConsumerFactoryFn() for KafkIO reader [1]. > > Using something like (such a wrapper is used in KafkasIO tests [2]): > private static class ConsumerFactoryFn > implements SerializableFunction<Map<String, Object>, > Consumer<byte[], byte[]>> { > @Override > public Consumer<byte[], byte[]> apply(Map<String, Object> config) { > return new KafkaConsumer(config) { > @Override > public ConsumerRecords<K, V> poll(long timeout) { > // work around for BEAM-5375 > while (true) { > try { > return super.poll(timeout); > } catch (Exception e) { > // LOG & sleep for sec > } > } > } > } > } > > [1]: > https://github.com/apache/beam/blob/release-2.4.0/sdks/java/io/kafka/src/main/java/org/apache/beam/sdk/io/kafka/KafkaIO.java#L417 > [2]: > https://github.com/apache/beam/blob/release-2.4.0/sdks/java/io/kafka/src/test/java/org/apache/beam/sdk/io/kafka/KafkaIOTest.java#L261 > > On Tue, Sep 18, 2018 at 5:49 AM Eduardo Soldera < > eduardo.sold...@arquivei.com.br> wrote: > >> Hi Raghu, we're not sure how long the network was down. According to the >> logs no longer than one minute. A 30 second shutdown would work for the >> tests. >> >> Regards >> >> Em sex, 14 de set de 2018 às 21:41, Raghu Angadi <rang...@google.com> >> escreveu: >> >>> Thanks. I could repro myself as well. How long was the network down? >>> >>> Trying to get the fix into 2.7 RC2. >>> >>> On Fri, Sep 14, 2018 at 12:25 PM Eduardo Soldera < >>> eduardo.sold...@arquivei.com.br> wrote: >>> >>>> Just to make myself clear, I'm not sure how to use the patch but if you >>>> could send us some guidance would be great. >>>> >>>> Em sex, 14 de set de 2018 às 16:24, Eduardo Soldera < >>>> eduardo.sold...@arquivei.com.br> escreveu: >>>> >>>>> Hi Raghu, yes, it is feasible, would you do that for us? I'm not sure >>>>> how we'd use the patch. We're using SBT and Spotify's Scio with Scala. >>>>> >>>>> Thanks >>>>> >>>>> Em sex, 14 de set de 2018 às 16:07, Raghu Angadi <rang...@google.com> >>>>> escreveu: >>>>> >>>>>> Is is feasible for you to verify the fix in your dev job? I can make >>>>>> a patch against Beam 2.4 branch if you like. >>>>>> >>>>>> Raghu. >>>>>> >>>>>> On Fri, Sep 14, 2018 at 11:14 AM Eduardo Soldera < >>>>>> eduardo.sold...@arquivei.com.br> wrote: >>>>>> >>>>>>> Hi Raghu, thank you very much for the pull request. >>>>>>> We'll wait for the 2.7 Beam release. >>>>>>> >>>>>>> Regards! >>>>>>> >>>>>>> Em qui, 13 de set de 2018 às 18:19, Raghu Angadi <rang...@google.com> >>>>>>> escreveu: >>>>>>> >>>>>>>> Fix: https://github.com/apache/beam/pull/6391 >>>>>>>> >>>>>>>> On Wed, Sep 12, 2018 at 3:30 PM Raghu Angadi <rang...@google.com> >>>>>>>> wrote: >>>>>>>> >>>>>>>>> Filed BEAM-5375 <https://issues.apache.org/jira/browse/BEAM-5375>. >>>>>>>>> I will fix it later this week. >>>>>>>>> >>>>>>>>> On Wed, Sep 12, 2018 at 12:16 PM Raghu Angadi <rang...@google.com> >>>>>>>>> wrote: >>>>>>>>> >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> On Wed, Sep 12, 2018 at 12:11 PM Raghu Angadi <rang...@google.com> >>>>>>>>>> wrote: >>>>>>>>>> >>>>>>>>>>> Thanks for the job id, I looked at the worker logs (following >>>>>>>>>>> usual support oncall access protocol that provides temporary access >>>>>>>>>>> to >>>>>>>>>>> things like logs in GCP): >>>>>>>>>>> >>>>>>>>>>> Root issue looks like consumerPollLoop() mentioned earlier needs >>>>>>>>>>> to handle unchecked exception. In your case it is clear that poll >>>>>>>>>>> thread >>>>>>>>>>> exited with a runtime exception. The reader does not check for it >>>>>>>>>>> and >>>>>>>>>>> continues to wait for poll thread to enqueue messages. A fix should >>>>>>>>>>> result >>>>>>>>>>> in an IOException for read from the source. The runners will handle >>>>>>>>>>> that >>>>>>>>>>> appropriately after that. I will file a jira. >>>>>>>>>>> >>>>>>>>>>> https://github.com/apache/beam/blob/master/sdks/java/io/kafka/src/main/java/org/apache/beam/sdk/io/kafka/KafkaUnboundedReader.java#L678 >>>>>>>>>>> >>>>>>>>>> >>>>>>>>>> Ignore the link.. was pasted here by mistake. >>>>>>>>>> >>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>> From the logs (with a comment below each one): >>>>>>>>>>> >>>>>>>>>>> - 2018-09-12 06:13:07.345 PDT Reader-0: reading from >>>>>>>>>>> kafka_topic-0 starting at offset 2 >>>>>>>>>>> - Implies the reader is initialized and poll thread is >>>>>>>>>>> started. >>>>>>>>>>> - 2018-09-12 06:13:07.780 PDT Reader-0: first record offset 2 >>>>>>>>>>> - The reader actually got a message received by the poll >>>>>>>>>>> thread from Kafka. >>>>>>>>>>> - 2018-09-12 06:16:48.771 PDT Reader-0: exception while >>>>>>>>>>> fetching latest offset for partition kafka_topic-0. will be >>>>>>>>>>> retried. >>>>>>>>>>> - This must have happened around the time when network >>>>>>>>>>> was disrupted. This is from. Actual log is from another >>>>>>>>>>> periodic task that >>>>>>>>>>> fetches latest offsets for partitions. >>>>>>>>>>> >>>>>>>>>>> The poll thread must have died around the time network was >>>>>>>>>>> disrupted. >>>>>>>>>>> >>>>>>>>>>> The following log comes from kafka client itself and is printed >>>>>>>>>>> every second when KafkaIO fetches latest offset. This log seems to >>>>>>>>>>> be added >>>>>>>>>>> in recent versions. It is probably an unintentional log. I don't >>>>>>>>>>> think >>>>>>>>>>> there is any better to fetch latest offsets than how KafkaIO does >>>>>>>>>>> now. This >>>>>>>>>>> is logged inside consumer.position() called at [1]. >>>>>>>>>>> >>>>>>>>>>> - 2018-09-12 06:13:11.786 PDT [Consumer clientId=consumer-2, >>>>>>>>>>> groupId=Reader-0_offset_consumer_1735388161_genericPipe] >>>>>>>>>>> Resetting offset >>>>>>>>>>> for partition com.arquivei.dataeng.andre-0 to offset 3. >>>>>>>>>>> >>>>>>>>>>> [1]: >>>>>>>>>>> https://github.com/apache/beam/blob/master/sdks/java/io/kafka/src/main/java/org/apache/beam/sdk/io/kafka/KafkaUnboundedReader.java#L678 >>>>>>>>>>> >>>>>>>>>> >>>>>>>>>> This 'Resetting offset' is harmless, but is quite annoying to see >>>>>>>>>> in the worker logs. One way to avoid is to set kafka consumer's log >>>>>>>>>> level >>>>>>>>>> to WARNING. Ideally KafkaIO itself should do something to avoid it >>>>>>>>>> without >>>>>>>>>> user option. >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> >>>>>>>>>>> On Wed, Sep 12, 2018 at 10:27 AM Eduardo Soldera < >>>>>>>>>>> eduardo.sold...@arquivei.com.br> wrote: >>>>>>>>>>> >>>>>>>>>>>> Hi Raghu! The job_id of our dev job is >>>>>>>>>>>> 2018-09-12_06_11_48-5600553605191377866. >>>>>>>>>>>> >>>>>>>>>>>> Thanks! >>>>>>>>>>>> >>>>>>>>>>>> Em qua, 12 de set de 2018 às 14:18, Raghu Angadi < >>>>>>>>>>>> rang...@google.com> escreveu: >>>>>>>>>>>> >>>>>>>>>>>>> Thanks for debugging. >>>>>>>>>>>>> Can you provide the job_id of your dev job? The stacktrace >>>>>>>>>>>>> shows that there is no thread running 'consumerPollLoop()' which >>>>>>>>>>>>> can >>>>>>>>>>>>> explain stuck reader. You will likely find a logs at line 594 & >>>>>>>>>>>>> 587 [1]. >>>>>>>>>>>>> Dataflow caches its readers and DirectRunner may not. That can >>>>>>>>>>>>> explain >>>>>>>>>>>>> DirectRunner resume reads. The expectation in KafkaIO is that >>>>>>>>>>>>> Kafka client >>>>>>>>>>>>> library takes care of retrying in case of connection problems (as >>>>>>>>>>>>> documented). It is possible that in some cases poll() throws and >>>>>>>>>>>>> we need to >>>>>>>>>>>>> restart the client in KafkaIO. >>>>>>>>>>>>> >>>>>>>>>>>>> [1]: >>>>>>>>>>>>> https://github.com/apache/beam/blob/master/sdks/java/io/kafka/src/main/java/org/apache/beam/sdk/io/kafka/KafkaUnboundedReader.java#L594 >>>>>>>>>>>>> >>>>>>>>>>>>> On Wed, Sep 12, 2018 at 9:59 AM Eduardo Soldera < >>>>>>>>>>>>> eduardo.sold...@arquivei.com.br> wrote: >>>>>>>>>>>>> >>>>>>>>>>>>>> Hi Raghu, thanks for your help. >>>>>>>>>>>>>> Just answering your previous question, the following logs >>>>>>>>>>>>>> were the same as before the error, as if the pipeline were still >>>>>>>>>>>>>> getting >>>>>>>>>>>>>> the messages, for example: >>>>>>>>>>>>>> >>>>>>>>>>>>>> (...) >>>>>>>>>>>>>> Resetting offset for partition com.arquivei.dataeng.andre-0 >>>>>>>>>>>>>> to offset 10. >>>>>>>>>>>>>> Resetting offset for partition com.arquivei.dataeng.andre-0 >>>>>>>>>>>>>> to offset 15. >>>>>>>>>>>>>> ERROR >>>>>>>>>>>>>> Resetting offset for partition com.arquivei.dataeng.andre-0 >>>>>>>>>>>>>> to offset 22. >>>>>>>>>>>>>> Resetting offset for partition com.arquivei.dataeng.andre-0 >>>>>>>>>>>>>> to offset 30. >>>>>>>>>>>>>> (...) >>>>>>>>>>>>>> >>>>>>>>>>>>>> But when checking the Kafka Consumer Group, the current >>>>>>>>>>>>>> offset stays at 15, the commited offset from the last processed >>>>>>>>>>>>>> message, >>>>>>>>>>>>>> before the error. >>>>>>>>>>>>>> >>>>>>>>>>>>>> We'll file a bug, but we could now reproduce the issue in a >>>>>>>>>>>>>> Dev scenario. >>>>>>>>>>>>>> We started the same pipeline using the direct runner, without >>>>>>>>>>>>>> Google Dataflow. We blocked the Kafka Broker network and the >>>>>>>>>>>>>> same error was >>>>>>>>>>>>>> thrown. Then we unblocked the network and the pipeline was able >>>>>>>>>>>>>> to >>>>>>>>>>>>>> successfully process the subsequent messages. >>>>>>>>>>>>>> When we started the same pipeline in the Dataflow runner and >>>>>>>>>>>>>> did the same test, the same problem from our production scenario >>>>>>>>>>>>>> happened, >>>>>>>>>>>>>> Dataflow couldn't process the new messages. Unfortunately, we've >>>>>>>>>>>>>> stopped >>>>>>>>>>>>>> the dataflow job in production, but the problematic dev job is >>>>>>>>>>>>>> still >>>>>>>>>>>>>> running and the log file of the VM is attached. Thank you very >>>>>>>>>>>>>> much. >>>>>>>>>>>>>> Best regards >>>>>>>>>>>>>> >>>>>>>>>>>>>> Em ter, 11 de set de 2018 às 18:28, Raghu Angadi < >>>>>>>>>>>>>> rang...@google.com> escreveu: >>>>>>>>>>>>>> >>>>>>>>>>>>>>> Specifically, I am interested if you have any thread running >>>>>>>>>>>>>>> 'consumerPollLoop()' [1]. There should always be one (if a >>>>>>>>>>>>>>> worker is >>>>>>>>>>>>>>> assigned one of the partitions). It is possible that >>>>>>>>>>>>>>> KafkaClient itself is >>>>>>>>>>>>>>> hasn't recovered from the group coordinator error (though >>>>>>>>>>>>>>> unlikely). >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> https://github.com/apache/beam/blob/master/sdks/java/io/kafka/src/main/java/org/apache/beam/sdk/io/kafka/KafkaUnboundedReader.java#L570 >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> On Tue, Sep 11, 2018 at 12:31 PM Raghu Angadi < >>>>>>>>>>>>>>> rang...@google.com> wrote: >>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> Hi Eduardo, >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> In case of any error, the pipeline should keep on trying to >>>>>>>>>>>>>>>> fetch. I don't know about this particular error. Do you see >>>>>>>>>>>>>>>> any others >>>>>>>>>>>>>>>> afterwards in the log? >>>>>>>>>>>>>>>> Couple of things you could try if the logs are not useful : >>>>>>>>>>>>>>>> - login to one of the VMs and get stacktrace of java >>>>>>>>>>>>>>>> worker (look for a container called java-streaming) >>>>>>>>>>>>>>>> - file a support bug or stackoverflow question with jobid >>>>>>>>>>>>>>>> so that Dataflow oncall can take a look. >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> Raghu. >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> On Tue, Sep 11, 2018 at 12:10 PM Eduardo Soldera < >>>>>>>>>>>>>>>> eduardo.sold...@arquivei.com.br> wrote: >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> Hi, >>>>>>>>>>>>>>>>> We have a Apache Beam pipeline running in Google Dataflow >>>>>>>>>>>>>>>>> using KafkaIO. Suddenly the pipeline stop fetching Kafka >>>>>>>>>>>>>>>>> messages at all, >>>>>>>>>>>>>>>>> as our other workers from other pipelines continued to get >>>>>>>>>>>>>>>>> Kafka messages. >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> At the moment it stopped we got these messages: >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> I [Consumer clientId=consumer-1, groupId=genericPipe] Error >>>>>>>>>>>>>>>>> sending fetch request (sessionId=1396189203, epoch=2431598) >>>>>>>>>>>>>>>>> to node 3: org.apache.kafka.common.errors.DisconnectException. >>>>>>>>>>>>>>>>> I [Consumer clientId=consumer-1, groupId=genericPipe] Group >>>>>>>>>>>>>>>>> coordinator 10.0.52.70:9093 (id: 2147483646 rack: null) is >>>>>>>>>>>>>>>>> unavailable or invalid, will attempt rediscovery >>>>>>>>>>>>>>>>> I [Consumer clientId=consumer-1, groupId=genericPipe] >>>>>>>>>>>>>>>>> Discovered group coordinator 10.0.52.70:9093 (id: 2147483646 >>>>>>>>>>>>>>>>> rack: null) >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> And then the pipeline stopped reading the messages. >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> This is the KafkaIO setup we have: >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> KafkaIO.read[String,String]() >>>>>>>>>>>>>>>>> .withBootstrapServers(server) >>>>>>>>>>>>>>>>> .withTopic(topic) >>>>>>>>>>>>>>>>> .withKeyDeserializer(classOf[StringDeserializer]) >>>>>>>>>>>>>>>>> .withValueDeserializer(classOf[StringDeserializer]) >>>>>>>>>>>>>>>>> .updateConsumerProperties(properties) >>>>>>>>>>>>>>>>> .commitOffsetsInFinalize() >>>>>>>>>>>>>>>>> .withoutMetadata() >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> Any help will be much appreciated. >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> Best regards, >>>>>>>>>>>>>>>>> -- >>>>>>>>>>>>>>>>> Eduardo Soldera Garcia >>>>>>>>>>>>>>>>> Data Engineer >>>>>>>>>>>>>>>>> (16) 3509-5555 | www.arquivei.com.br >>>>>>>>>>>>>>>>> <https://arquivei.com.br/?utm_campaign=assinatura-email&utm_content=assinatura> >>>>>>>>>>>>>>>>> [image: Arquivei.com.br – Inteligência em Notas Fiscais] >>>>>>>>>>>>>>>>> <https://arquivei.com.br/?utm_campaign=assinatura-email&utm_content=assinatura> >>>>>>>>>>>>>>>>> [image: Google seleciona Arquivei para imersão e mentoria >>>>>>>>>>>>>>>>> no Vale do Silício] >>>>>>>>>>>>>>>>> <https://arquivei.com.br/blog/google-seleciona-arquivei/?utm_campaign=assinatura-email-launchpad&utm_content=assinatura-launchpad> >>>>>>>>>>>>>>>>> <https://www.facebook.com/arquivei> >>>>>>>>>>>>>>>>> <https://www.linkedin.com/company/arquivei> >>>>>>>>>>>>>>>>> <https://www.youtube.com/watch?v=sSUUKxbXnxk> >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> -- >>>>>>>>>>>>>> Eduardo Soldera Garcia >>>>>>>>>>>>>> Data Engineer >>>>>>>>>>>>>> (16) 3509-5555 | www.arquivei.com.br >>>>>>>>>>>>>> <https://arquivei.com.br/?utm_campaign=assinatura-email&utm_content=assinatura> >>>>>>>>>>>>>> [image: Arquivei.com.br – Inteligência em Notas Fiscais] >>>>>>>>>>>>>> <https://arquivei.com.br/?utm_campaign=assinatura-email&utm_content=assinatura> >>>>>>>>>>>>>> [image: Google seleciona Arquivei para imersão e mentoria no >>>>>>>>>>>>>> Vale do Silício] >>>>>>>>>>>>>> <https://arquivei.com.br/blog/google-seleciona-arquivei/?utm_campaign=assinatura-email-launchpad&utm_content=assinatura-launchpad> >>>>>>>>>>>>>> <https://www.facebook.com/arquivei> >>>>>>>>>>>>>> <https://www.linkedin.com/company/arquivei> >>>>>>>>>>>>>> <https://www.youtube.com/watch?v=sSUUKxbXnxk> >>>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>> -- >>>>>>>>>>>> Eduardo Soldera Garcia >>>>>>>>>>>> Data Engineer >>>>>>>>>>>> (16) 3509-5555 | www.arquivei.com.br >>>>>>>>>>>> <https://arquivei.com.br/?utm_campaign=assinatura-email&utm_content=assinatura> >>>>>>>>>>>> [image: Arquivei.com.br – Inteligência em Notas Fiscais] >>>>>>>>>>>> <https://arquivei.com.br/?utm_campaign=assinatura-email&utm_content=assinatura> >>>>>>>>>>>> [image: Google seleciona Arquivei para imersão e mentoria no >>>>>>>>>>>> Vale do Silício] >>>>>>>>>>>> <https://arquivei.com.br/blog/google-seleciona-arquivei/?utm_campaign=assinatura-email-launchpad&utm_content=assinatura-launchpad> >>>>>>>>>>>> <https://www.facebook.com/arquivei> >>>>>>>>>>>> <https://www.linkedin.com/company/arquivei> >>>>>>>>>>>> <https://www.youtube.com/watch?v=sSUUKxbXnxk> >>>>>>>>>>>> >>>>>>>>>>> >>>>>>> >>>>>>> -- >>>>>>> Eduardo Soldera Garcia >>>>>>> Data Engineer >>>>>>> (16) 3509-5555 | www.arquivei.com.br >>>>>>> <https://arquivei.com.br/?utm_campaign=assinatura-email&utm_content=assinatura> >>>>>>> [image: Arquivei.com.br – Inteligência em Notas Fiscais] >>>>>>> <https://arquivei.com.br/?utm_campaign=assinatura-email&utm_content=assinatura> >>>>>>> [image: Google seleciona Arquivei para imersão e mentoria no Vale do >>>>>>> Silício] >>>>>>> <https://arquivei.com.br/blog/google-seleciona-arquivei/?utm_campaign=assinatura-email-launchpad&utm_content=assinatura-launchpad> >>>>>>> <https://www.facebook.com/arquivei> >>>>>>> <https://www.linkedin.com/company/arquivei> >>>>>>> <https://www.youtube.com/watch?v=sSUUKxbXnxk> >>>>>>> >>>>>> >>>>> >>>>> -- >>>>> Eduardo Soldera Garcia >>>>> Data Engineer >>>>> (16) 3509-5555 | www.arquivei.com.br >>>>> <https://arquivei.com.br/?utm_campaign=assinatura-email&utm_content=assinatura> >>>>> [image: Arquivei.com.br – Inteligência em Notas Fiscais] >>>>> <https://arquivei.com.br/?utm_campaign=assinatura-email&utm_content=assinatura> >>>>> [image: Google seleciona Arquivei para imersão e mentoria no Vale do >>>>> Silício] >>>>> <https://arquivei.com.br/blog/google-seleciona-arquivei/?utm_campaign=assinatura-email-launchpad&utm_content=assinatura-launchpad> >>>>> <https://www.facebook.com/arquivei> >>>>> <https://www.linkedin.com/company/arquivei> >>>>> <https://www.youtube.com/watch?v=sSUUKxbXnxk> >>>>> >>>> >>>> >>>> -- >>>> Eduardo Soldera Garcia >>>> Data Engineer >>>> (16) 3509-5555 | www.arquivei.com.br >>>> <https://arquivei.com.br/?utm_campaign=assinatura-email&utm_content=assinatura> >>>> [image: Arquivei.com.br – Inteligência em Notas Fiscais] >>>> <https://arquivei.com.br/?utm_campaign=assinatura-email&utm_content=assinatura> >>>> [image: Google seleciona Arquivei para imersão e mentoria no Vale do >>>> Silício] >>>> <https://arquivei.com.br/blog/google-seleciona-arquivei/?utm_campaign=assinatura-email-launchpad&utm_content=assinatura-launchpad> >>>> <https://www.facebook.com/arquivei> >>>> <https://www.linkedin.com/company/arquivei> >>>> <https://www.youtube.com/watch?v=sSUUKxbXnxk> >>>> >>> >> >> -- >> Eduardo Soldera Garcia >> Data Engineer >> (16) 3509-5555 | www.arquivei.com.br >> <https://arquivei.com.br/?utm_campaign=assinatura-email&utm_content=assinatura> >> [image: Arquivei.com.br – Inteligência em Notas Fiscais] >> <https://arquivei.com.br/?utm_campaign=assinatura-email&utm_content=assinatura> >> [image: Google seleciona Arquivei para imersão e mentoria no Vale do >> Silício] >> <https://arquivei.com.br/blog/google-seleciona-arquivei/?utm_campaign=assinatura-email-launchpad&utm_content=assinatura-launchpad> >> <https://www.facebook.com/arquivei> >> <https://www.linkedin.com/company/arquivei> >> <https://www.youtube.com/watch?v=sSUUKxbXnxk> >> > -- Eduardo Soldera Garcia Data Engineer (16) 3509-5555 | www.arquivei.com.br <https://arquivei.com.br/?utm_campaign=assinatura-email&utm_content=assinatura> [image: Arquivei.com.br – Inteligência em Notas Fiscais] <https://arquivei.com.br/?utm_campaign=assinatura-email&utm_content=assinatura> [image: Google seleciona Arquivei para imersão e mentoria no Vale do Silício] <https://arquivei.com.br/blog/google-seleciona-arquivei/?utm_campaign=assinatura-email-launchpad&utm_content=assinatura-launchpad> <https://www.facebook.com/arquivei> <https://www.linkedin.com/company/arquivei> <https://www.youtube.com/watch?v=sSUUKxbXnxk>