{"id":5155,"date":"2018-05-21T06:45:33","date_gmt":"2018-05-21T13:45:33","guid":{"rendered":"https:\/\/www.couchbase.com\/blog\/?p=5155"},"modified":"2025-06-13T19:28:11","modified_gmt":"2025-06-14T02:28:11","slug":"nifi-processing-flow-couchbase-server","status":"publish","type":"post","link":"https:\/\/www.couchbase.com\/blog\/pt\/nifi-processing-flow-couchbase-server\/","title":{"rendered":"Introdu\u00e7\u00e3o ao NiFi e ao Couchbase Server"},"content":{"rendered":"<div class=\"paragraph\">\n<div class=\"paragraph\">\n<p>Estou apenas come\u00e7ando a usar o NiFi, uma ferramenta para automatizar o fluxo de dados. \u00c9 uma ferramenta para migra\u00e7\u00e3o, sincroniza\u00e7\u00e3o e outros tipos de processamento de dados. Ela me foi apresentada por um dos mais novos clientes do Couchbase: o Cincinnati Reds.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Neste post, descreverei para que os Reds est\u00e3o usando o NiFi e mostrarei como come\u00e7ar a trabalhar com um fluxo de dados muito b\u00e1sico do SQL Server para o Couchbase Server.<\/p>\n<\/div>\n<div class=\"sect1\">\n<h2 id=\"_nifi_and_the_reds\">NiFi e os Reds<\/h2>\n<div class=\"sectionbody\">\n<div class=\"paragraph\">\n<p>Os Reds querem criar algumas visualiza\u00e7\u00f5es dos ingressos que est\u00e3o sendo escaneados no dia do jogo no Great American Ball Park.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>A equipe de dados tem acesso a um banco de dados do SQL Server que \u00e9 usado para armazenar dados ao vivo sobre um jogo. Sempre que um ingresso \u00e9 escaneado no port\u00e3o, os dados s\u00e3o colocados nesse banco de dados. (Esse banco de dados tamb\u00e9m rastreia concess\u00f5es e outros dados).<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Os Reds poderiam consultar os dados diretamente do SQL Server, mas uma visualiza\u00e7\u00e3o em tempo real durante a carga pesada do jogo resultaria em uma visualiza\u00e7\u00e3o lenta ou em uma carga excessiva para o banco de dados, ou ambos. Em vez disso, eles gostariam de copiar esses dados em um cluster Couchbase e usar o cluster como backend para a visualiza\u00e7\u00e3o.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>H\u00e1 v\u00e1rias maneiras de mover dados para o Couchbase, mas os Reds j\u00e1 est\u00e3o usando o Apache NiFi de c\u00f3digo aberto com o SQL Server, e seria ideal se eles pudessem usar essa mesma combina\u00e7\u00e3o para este projeto. Felizmente, o NiFi j\u00e1 \u00e9 compat\u00edvel com o Couchbase, portanto \u00e9 muito f\u00e1cil fazer isso.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"sect1\">\n<h2 id=\"_getting_started_with_nifi_and_couchbase\">Primeiros passos com o NiFi e o Couchbase<\/h2>\n<div class=\"sectionbody\">\n<div class=\"paragraph\">\n<p>Para come\u00e7ar a fazer experimentos com o NiFi localmente, decidi usar o Docker. No host do Docker, posso facilmente criar uma inst\u00e2ncia de cada um deles:<\/p>\n<\/div>\n<div class=\"ulist\">\n<ul>\n<li><a href=\"https:\/\/hub.docker.com\/_\/couchbase\/\">Servidor Couchbase<\/a> (\u00e9 claro)<\/li>\n<li>Apache Nifi (<a href=\"https:\/\/hub.docker.com\/r\/apache\/nifi\">Link do hub do Docker<\/a>)<\/li>\n<li><a href=\"https:\/\/hub.docker.com\/r\/microsoft\/mssql-server-linux\/\">Microsoft SQL Server<\/a> (para Linux - acho que os Reds n\u00e3o est\u00e3o usando o SQL para Linux, mas \u00e9 o suficiente)<\/li>\n<\/ul>\n<\/div>\n<div class=\"paragraph\">\n<p>Voc\u00ea n\u00e3o precisa usar o Docker, mas ele tornou muito f\u00e1cil para mim come\u00e7ar a trabalhar e ser produtivo imediatamente.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Aqui est\u00e3o os comandos que usei para executar as imagens do Docker:<\/p>\n<\/div>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre class=\"highlight decode:true\"><code>docker run -d --name db55beta -p 8091-8094:8091-8094 -p 11210:11210 couchbase:5.5.0-beta\r\n\r\ndocker run -d --name NiFi -p 8080:8080 apache\/nifi:latest\r\n\r\ndocker run -d -e 'ACCEPT_EULA=Y' -e 'SA_PASSWORD=&lt;use a strong password here&gt;' -p 1433:1433 microsoft\/mssql-server-linux:2017-latest<\/code><\/pre>\n<\/div>\n<\/div>\n<div class=\"paragraph\">\n<p><em>Observe que a senha que voc\u00ea fornece para SA_PASSWORD <strong>deve<\/strong> atender aos requisitos de senha forte do SQL Server. Caso contr\u00e1rio, voc\u00ea n\u00e3o conseguir\u00e1 usar o SQL Server e ficar\u00e1 um pouco frustrado e confuso por cerca de 20 minutos.<\/em><\/p>\n<\/div>\n<div class=\"sect2\">\n<h3 id=\"_starting_with_sql_server\">Come\u00e7ando com o SQL Server<\/h3>\n<div class=\"paragraph\">\n<p>Usei o SQL Server Management Studio para me conectar \u00e0 inst\u00e2ncia do SQL Server no Docker (localhost, porta 1433). Como (ainda) n\u00e3o tenho acesso ao servidor real do Reds, criei meu pr\u00f3prio esquema para fazer uma aproxima\u00e7\u00e3o:<\/p>\n<\/div>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre class=\"highlight decode:true\"><code class=\"language-SQL\">CREATE TABLE [dbo].[TicketCheck](\r\n\t[Id] [uniqueidentifier] NOT NULL,\r\n\t[FullName] [varchar](100) NOT NULL,\r\n\t[Section] [varchar](10) NOT NULL,\r\n\t[Row] [varchar](10) NOT NULL,\r\n\t[Seat] [varchar](10) NOT NULL,\r\n\t[GameDay] [datetime] NOT NULL,\r\n CONSTRAINT [PK_TicketCheck] PRIMARY KEY CLUSTERED\r\n(\r\n\t[Id] ASC\r\n)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]\r\n) ON [PRIMARY]\r\n\r\nGO\r\n\r\nALTER TABLE [dbo].[TicketCheck] ADD  CONSTRAINT [DF_TicketCheck_Id]  DEFAULT (newid()) FOR [Id]\r\nGO<\/code><\/pre>\n<\/div>\n<\/div>\n<div class=\"paragraph\">\n<p>Mais tarde, vou preench\u00ea-lo com um <code>INSERIR<\/code> declara\u00e7\u00e3o dessa forma:<\/p>\n<\/div>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre class=\"highlight decode:true\"><code class=\"language-SQL\">INSERT INTO TicketCheck (FullName, Section, [Row], Seat, GameDay) VALUES (\r\n\t'Joey Votto',\r\n\t'429',\r\n\t'C',\r\n\t'11',\r\n\tGETDATE()\r\n)<\/code><\/pre>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"sect2\">\n<h3 id=\"_setting_up_couchbase\">Configura\u00e7\u00e3o do Couchbase<\/h3>\n<div class=\"paragraph\">\n<p>Depois que fiz login no Couchbase pela primeira vez (localhost:8091) e criei um cluster, fiz duas coisas:<\/p>\n<\/div>\n<div class=\"ulist\">\n<ul>\n<li>Criei um bucket chamado \"tickets\". \u00c9 para l\u00e1 que quero que v\u00e3o os dados do SQL Server.<\/li>\n<li>Criei um usu\u00e1rio <em>tamb\u00e9m<\/em> chamado \"tickets\", com a permiss\u00e3o adequada para o bucket. \u00c9 importante que o usu\u00e1rio tenha o mesmo nome do bucket.<\/li>\n<\/ul>\n<\/div>\n<div class=\"paragraph\">\n<p><em>A raz\u00e3o pela qual voc\u00ea precisa criar um usu\u00e1rio com o mesmo nome \u00e9 que o processador NiFi Couchbase est\u00e1 um pouco desatualizado, portanto, essa \u00e9 uma solu\u00e7\u00e3o alternativa. O NiFi ainda n\u00e3o foi atualizado para lidar com os novos recursos RBAC do Couchbase. Consulte Apache Nifi <a href=\"https:\/\/issues.apache.org\/jira\/browse\/NIFI-5054\">Edi\u00e7\u00e3o 5054<\/a> para obter mais informa\u00e7\u00f5es.<\/em><\/p>\n<\/div>\n<\/div>\n<div class=\"sect2\">\n<h3 id=\"_setting_up_nifi\">Configura\u00e7\u00e3o do NiFi<\/h3>\n<div class=\"paragraph\">\n<p>O NiFi \u00e9 uma ferramenta de fluxo de dados visual baseada na Web. Sou um desenvolvedor, estou acostumado a c\u00f3digos e linhas de comando, mas definitivamente aprecio uma interface visual agrad\u00e1vel quando aplic\u00e1vel.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Se voc\u00ea usou o Docker, basta acessar <strong>localhost:8080\/NiFi<\/strong>. Voc\u00ea ver\u00e1 o que parece ser uma grande folha de papel quadriculado com algumas barras de ferramentas\/janelas na parte superior.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Vou pular um pouco a cabe\u00e7a e mostrar o fluxo de dados completo que criei:<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p><span class=\"image\"><img decoding=\"async\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2018\/05\/10701-nifi-end-state.png\" alt=\"NiFi complete data flow\" \/><\/span><\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Vou explicar isso passo a passo, mas lembre-se de que n\u00e3o sou especialista em NiFi.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Em um n\u00edvel mais alto, cada uma dessas caixas \u00e9 um \"processador\". Cada uma delas obt\u00e9m dados de algum lugar, processa os dados de alguma forma e grava os dados em outro lugar. Esse \"fluxo\" de dados pode vir de uma fonte externa, uma fila NiFi, ou ser gravado em uma fonte externa. Cada processador pode ser \"Iniciado\" e \"Parado\".<\/p>\n<\/div>\n<\/div>\n<div class=\"sect2\">\n<h3 id=\"_database_connection_pooling_service\">Servi\u00e7o de pooling de conex\u00f5es de banco de dados<\/h3>\n<div class=\"paragraph\">\n<p>Antes de criarmos um processador, vamos informar ao NiFi sobre os bancos de dados que usaremos.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>H\u00e1 uma janela \"Operate\" (Operar) que est\u00e1 flutuando sobre o papel gr\u00e1fico. Clique no \u00edcone de configura\u00e7\u00f5es para abrir a janela NiFi Flow Configuration (Configura\u00e7\u00e3o do NiFi Flow).<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p><span class=\"image\"><img decoding=\"async\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2018\/05\/10703-nifi-configuration.png\" alt=\"NiFi Configuration\" \/><\/span><\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Observe a guia Controller Services. Penso nisso como uma cole\u00e7\u00e3o de fontes de dados externas \u00e0s quais os processadores podem se conectar. Vamos adicionar dois servi\u00e7os de controle: um para o SQL Server e outro para o Couchbase.<\/p>\n<\/div>\n<\/div>\n<div class=\"sect2\">\n<h3 id=\"_dbcpconnectionpool\">DBCPConnectionPool<\/h3>\n<div class=\"paragraph\">\n<p>Clique no bot\u00e3o \"+\" para adicionar. Vamos come\u00e7ar com o SQL Server: localize DBCPConnectionPool e clique em \"Add\". Ele deve aparecer na lista. Clique no \u00edcone de engrenagem e navegue at\u00e9 a guia de propriedades:<\/p>\n<\/div>\n<div class=\"ulist\">\n<ul>\n<li><strong>URL de conex\u00e3o com o banco de dados<\/strong> - Digite um valor como <code>jdbc:sqlserver:\/\/172.17.0.4<\/code>.<\/li>\n<li><strong>Nome da classe do driver de banco de dados<\/strong> - Se voc\u00ea estiver usando o SQL Server, \u00e9 <code>com.microsoft.sqlserver.jdbc.SQLServerDriver<\/code><\/li>\n<li><strong>Local(is) do driver do banco de dados<\/strong> - Entrar <code>file:\/\/\/usr\/share\/java\/mssql-jdbc-6.4.0.jre8.jar<\/code>. Observe que o NiFi n\u00e3o vem com esse driver pronto para uso (pelo menos n\u00e3o a imagem do Docker). <a href=\"https:\/\/www.microsoft.com\/en-us\/download\/details.aspx?id=56615\">Fa\u00e7a o download desse driver da Microsoft<\/a> e coloque-o na pasta \/usr\/share\/java em seu servidor NiFi (voc\u00ea pode usar o <code><a href=\"https:\/\/docs.docker.com\/engine\/reference\/commandline\/cp\/\">docker cp<\/a><\/code> se voc\u00ea estiver usando o Docker como eu).<\/li>\n<li><strong>Usu\u00e1rio do banco de dados<\/strong> e <strong>Senha<\/strong> - As credenciais do SQL Server que voc\u00ea precisa para se conectar.<\/li>\n<\/ul>\n<\/div>\n<div class=\"paragraph\">\n<p>Depois de adicion\u00e1-lo, voc\u00ea precisar\u00e1 \"habilit\u00e1-lo\" (clique no \u00edcone de raio) para us\u00e1-lo. Se precisar fazer altera\u00e7\u00f5es no futuro, voc\u00ea precisar\u00e1 desativ\u00e1-lo primeiro.<\/p>\n<\/div>\n<\/div>\n<div class=\"sect2\">\n<h3 id=\"_couchbaseclusterservice\">CouchbaseClusterService<\/h3>\n<div class=\"paragraph\">\n<p>Em seguida, vamos informar ao NiFi sobre o Couchbase. Novamente, clique no bot\u00e3o \"mais\" para adicionar. Procure o CouchbaseClusterService. Novamente, navegue at\u00e9 a guia de propriedades. Deve haver uma propriedade chamada <strong>Cadeia de conex\u00e3o<\/strong>. Digite algo como <code>couchbase:\/\/172.17.0.3<\/code>. Em seguida, clique no bot\u00e3o \"mais\" nessa guia e crie uma nova propriedade chamada \"Bucket Password for tickets\". Observe que o nome da propriedade deve ter o formato <strong>\"Senha do balde para \"<\/strong>. O valor dessa propriedade deve ser a senha do usu\u00e1rio do Couchbase que voc\u00ea criou anteriormente.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Agora, o NiFi conhece o SQL Server e o Couchbase. Vamos colocar isso em pr\u00e1tica.<\/p>\n<\/div>\n<\/div>\n<div class=\"sect2\">\n<h3 id=\"_querydatabasetable\">Tabela QueryDatabase<\/h3>\n<div class=\"paragraph\">\n<p>Come\u00e7arei com a fonte dos dados: um SQL Server. Mais especificamente, uma tabela no SQL Server. E, ainda mais especificamente, apenas novas linhas de dados nessa tabela (mais sobre como definir isso mais tarde).<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Primeiro, arraste o \u00edcone \"processor\" do canto superior esquerdo para o papel milimetrado. Em seguida, localize o processador QueryDatabaseTable e clique em \"add\". Nesse momento, voc\u00ea ter\u00e1 um processador no quadro com um \u00edcone de aviso que indica que \u00e9 necess\u00e1rio fazer algumas configura\u00e7\u00f5es.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p><span class=\"image\"><img decoding=\"async\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2018\/05\/10702-nifi-processor.gif\" alt=\"Adding a processor to NiFi\" \/><\/span><\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Voc\u00ea pode clicar duas vezes nesse processador para exibir seus detalhes. Estou interessado principalmente na guia \"Properties\" (Propriedades). Nessa guia, direi a esse processador a que banco de dados se conectar e como consultar os dados dele:<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>As propriedades de interesse:<\/p>\n<\/div>\n<div class=\"ulist\">\n<ul>\n<li><strong>Servi\u00e7o de pooling de conex\u00f5es de banco de dados<\/strong> - Selecione o DBCPConnectionPool que foi criado anteriormente.<\/li>\n<li><strong>Tipo de banco de dados<\/strong> - Selecionei o MS SQL 2008, que parece funcionar bem com o MS SQL para Linux, mas tamb\u00e9m h\u00e1 op\u00e7\u00f5es para o MS SQL 2012+ e \"Gen\u00e9rico\".<\/li>\n<li><strong>Nome da tabela<\/strong> - Digite o nome da tabela a ser consultada. <code>TicketCheck<\/code> \u00e9 a que eu usei.<\/li>\n<li><strong>Colunas de valor m\u00e1ximo<\/strong> - Eu entrei <code>Dia de jogo<\/code>. Essa \u00e9 a coluna que o NiFi verificar\u00e1 para encontrar dados novos\/atualizados na tabela. Talvez voc\u00ea queira usar um campo autoincrementado, um carimbo de data\/hora ou alguma outra combina\u00e7\u00e3o. O processador NiFi armazenar\u00e1 o valor mais recente em seu \"estado\" \u00e0 medida que avan\u00e7a.<\/li>\n<\/ul>\n<\/div>\n<\/div>\n<div class=\"sect2\">\n<h3 id=\"_putcouchbasekey\">PutCouchbaseKey<\/h3>\n<div class=\"paragraph\">\n<p>Vamos avan\u00e7ar um pouco e criar outro processador. Desta vez, ser\u00e1 um processador PutCouchbaseKey. Tudo o que esse processador faz \u00e9 pegar um peda\u00e7o de dados que est\u00e1 fluindo para ele e criar\/atualizar um documento do Couchbase com esses dados.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Para configur\u00e1-lo, defina estas propriedades:<\/p>\n<\/div>\n<div class=\"ulist\">\n<ul>\n<li><strong>Servi\u00e7o de controlador de cluster do Couchbase<\/strong> - selecione o CouchbaseClusterService que foi criado anteriormente.<\/li>\n<li><strong>Nome do balde<\/strong> - ingressos<\/li>\n<\/ul>\n<\/div>\n<\/div>\n<div class=\"sect2\">\n<h3 id=\"_getting_from_point_a_to_point_b\">Como ir do ponto A ao ponto B<\/h3>\n<div class=\"paragraph\">\n<p>Nesse ponto, o NiFi \u00e9 capaz de extrair dados do SQL Server e colocar documentos no Couchbase. Para finalizar, eles precisam estar conectados. Mas ainda h\u00e1 um pouco de trabalho a fazer. O processador QueryDatabaseTable gera dados \"Avro\", que s\u00e3o projetados para o Hadoop, mas tamb\u00e9m s\u00e3o usados pelo Spark e, \u00e9 claro, pelo Nifi. Poder\u00edamos aliment\u00e1-los diretamente no Couchbase, mas eles seriam armazenados como dados bin\u00e1rios, e n\u00e3o como JSON. Portanto, h\u00e1 algumas etapas intermedi\u00e1rias para coloc\u00e1-los no formato JSON puro.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Adicionei um processador SplitAvro e um processador ConvertAvroToJSON ao papel gr\u00e1fico.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>O processador SplitAvro dividir\u00e1 o arquivo de dados Avro (potencialmente grande) em arquivos menores. Isso pode n\u00e3o ser estritamente necess\u00e1rio, mas \u00e9 uma boa precau\u00e7\u00e3o a ser tomada e ajuda a dividir os dados para facilitar a visualiza\u00e7\u00e3o e a depura\u00e7\u00e3o. As propriedades padr\u00e3o desse processador est\u00e3o corretas.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>O processador ConvertAvroToJSON faz exatamente o que diz. Isso preparar\u00e1 os dados do Avro para o Couchbase. Eu alterei o <strong>Op\u00e7\u00f5es do cont\u00eainer JSON<\/strong> propriedade de <code>matriz<\/code> para <code>nenhum<\/code>. Eu s\u00f3 quero um documento JSON simples, e n\u00e3o uma matriz contendo um \u00fanico documento.<\/p>\n<\/div>\n<\/div>\n<div class=\"sect2\">\n<h3 id=\"_connecting_it_all_up\">Conectando tudo<\/h3>\n<div class=\"paragraph\">\n<p>Agora que voc\u00ea tem essas quatro pe\u00e7as no lugar, \u00e9 necess\u00e1rio conect\u00e1-las.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Primeiro, passe o mouse sobre o QueryDatabaseTable at\u00e9 ver um \u00edcone de seta. Clique e arraste essa seta at\u00e9 o processador SplitAvro. Aparecer\u00e1 uma fila entre eles chamada \"success\" (sucesso).<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Repita esse procedimento com os outros processadores. Um processador pode ter uma variedade de pontos de t\u00e9rmino que definem a rela\u00e7\u00e3o. Por exemplo, quando voc\u00ea arrasta uma conex\u00e3o entre SplitAvro e ConvertAvroToJSON, s\u00e3o apresentadas tr\u00eas op\u00e7\u00f5es: falha, original e divis\u00e3o. Isso varia de processador para processador, mas a ideia \u00e9 a seguinte:<\/p>\n<\/div>\n<div class=\"ulist\">\n<ul>\n<li><strong>falha<\/strong> - O SplitAvro falhou na convers\u00e3o, ent\u00e3o ele enviar\u00e1 os dados para \"failure\" (falha)<\/li>\n<li><strong>original<\/strong> - O SplitAvro pode canalizar os dados originais da seguinte maneira<\/li>\n<li><strong>dividir<\/strong> - Os dados reais da divis\u00e3o s\u00e3o apresentados desta forma. \u00c9 isso que voc\u00ea deve alimentar no ConvertAvroToJSON.<\/li>\n<\/ul>\n<\/div>\n<div class=\"paragraph\">\n<p>Com as outras conex\u00f5es, voc\u00ea poderia canalizar os dados de volta para o processo para tentar novamente ou talvez canaliz\u00e1-los para algum processador de notifica\u00e7\u00e3o ou depura\u00e7\u00e3o.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"sect1\">\n<h2 id=\"_turn_on_the_nifi_flow\">Ativar o fluxo NiFi<\/h2>\n<div class=\"sectionbody\">\n<div class=\"paragraph\">\n<p>Para iniciar um processador, clique nele e, em seguida, clique no bot\u00e3o \"start\" (iniciar) na janela Operate (parece o bot\u00e3o play de um videocassete). Talvez voc\u00ea queira experimentar com apenas um processador por vez e observar os dados come\u00e7arem a se acumular nas filas. Por fim, quando voc\u00ea come\u00e7ar a inserir linhas na tabela do SQL Server, elas dever\u00e3o acabar como novos documentos no Couchbase Server.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p><span class=\"image\"><img decoding=\"async\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2018\/05\/10704-sql-to-nifi-to-couchbase.gif\" alt=\"SQL Server to NiFi to Couchbase Server\" \/><\/span><\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Na anima\u00e7\u00e3o acima, estou inserindo duas novas linhas em uma tabela no SQL Server. O NiFi (n\u00e3o ilustrado) est\u00e1 processando-as e colocando-as no Couchbase.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"sect1\">\n<h2 id=\"_summary\">Resumo<\/h2>\n<div class=\"sectionbody\">\n<div class=\"paragraph\">\n<p>Esta postagem do blog fornece informa\u00e7\u00f5es b\u00e1sicas sobre como come\u00e7ar a usar o NiFi. H\u00e1 muito que voc\u00ea pode fazer. Se voc\u00ea estiver em uma empresa com uma variedade de fontes de dados, o NiFi \u00e9 uma \u00f3tima ferramenta para orquestrar todos esses fluxos de dados. O Couchbase Server tamb\u00e9m \u00e9 uma \u00f3tima op\u00e7\u00e3o:<\/p>\n<\/div>\n<div class=\"ulist\">\n<ul>\n<li>A flexibilidade do JSON permite que voc\u00ea ingira dados de praticamente qualquer fonte<\/li>\n<li>A arquitetura memory-first ajuda a maximizar o desempenho de seu fluxo de dados<\/li>\n<li>Os recursos de dimensionamento do Couchbase permitem que voc\u00ea aumente sua capacidade sem precisar colocar seu fluxo off-line<\/li>\n<\/ul>\n<\/div>\n<div class=\"paragraph\">\n<p>Estou aprendendo o NiFi pela primeira vez e j\u00e1 estou adorando a interface gr\u00e1fica e a simplicidade dos primeiros passos. Ainda tenho muito a aprender, mas espero que este post ajude voc\u00ea a usar o processador Couchbase no NiFi.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Se voc\u00ea estiver usando o NiFi e o Couchbase, quero ouvir sua opini\u00e3o. O conector do Couchbase poderia ser atualizado (<a href=\"https:\/\/issues.apache.org\/jira\/browse\/NIFI-5054\">consulte a edi\u00e7\u00e3o 5054<\/a>), e quanto mais voc\u00eas me contarem, mais f\u00e1cil ser\u00e1 justificar o tempo gasto trabalhando nisso.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Se voc\u00ea tiver d\u00favidas sobre o Couchbase, consulte a se\u00e7\u00e3o <a href=\"https:\/\/www.couchbase.com\/blog\/pt\/forums\/c\/couchbase-server\/\">F\u00f3runs do Couchbase Server<\/a>. Se voc\u00ea tiver d\u00favidas sobre o NiFi, consulte o Apache Nifi <a href=\"https:\/\/nifi.apache.org\/\">site do projeto<\/a>.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Tamb\u00e9m ficarei feliz em conversar com voc\u00ea sobre todos os itens acima. Voc\u00ea pode deixar um coment\u00e1rio abaixo ou me encontrar em <a href=\"https:\/\/twitter.com\/mgroves\">Twitter @mgroves<\/a>.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<\/div>","protected":false},"excerpt":{"rendered":"<p>I am just getting started with NiFi, a tool to automate the flow of data. It\u2019s a tool for migration, synchronization, and other types of data processing. It was introduced to me by one of Couchbase\u2019s newest customers: the Cincinnati [&hellip;]<\/p>","protected":false},"author":71,"featured_media":5162,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[1816],"tags":[1458,1481],"ppma_author":[8937],"class_list":["post-5155","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-couchbase-server","tag-migration","tag-nifi"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v25.8 (Yoast SEO v25.8) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Getting Started with NiFi and Couchbase Server - The Couchbase Blog<\/title>\n<meta name=\"description\" content=\"NiFi automates data flow, providing migration, synchronization, and more. Learn how the Cincinnati Reds baseball club uses NiFi to help with ticketing.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.couchbase.com\/blog\/pt\/nifi-processing-flow-couchbase-server\/\" \/>\n<meta property=\"og:locale\" content=\"pt_BR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Getting Started with NiFi and Couchbase Server\" \/>\n<meta property=\"og:description\" content=\"NiFi automates data flow, providing migration, synchronization, and more. Learn how the Cincinnati Reds baseball club uses NiFi to help with ticketing.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.couchbase.com\/blog\/pt\/nifi-processing-flow-couchbase-server\/\" \/>\n<meta property=\"og:site_name\" content=\"The Couchbase Blog\" \/>\n<meta property=\"article:published_time\" content=\"2018-05-21T13:45:33+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-06-14T02:28:11+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/05\/107-hero-couchbase-team-and-mr-redlegs.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"823\" \/>\n\t<meta property=\"og:image:height\" content=\"404\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Matthew Groves\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@mgroves\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Matthew Groves\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"11 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/nifi-processing-flow-couchbase-server\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/nifi-processing-flow-couchbase-server\/\"},\"author\":{\"name\":\"Matthew Groves\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/3929663e372020321b0152dc4fa65a58\"},\"headline\":\"Getting Started with NiFi and Couchbase Server\",\"datePublished\":\"2018-05-21T13:45:33+00:00\",\"dateModified\":\"2025-06-14T02:28:11+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/nifi-processing-flow-couchbase-server\/\"},\"wordCount\":2052,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/nifi-processing-flow-couchbase-server\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/05\/107-hero-couchbase-team-and-mr-redlegs.jpg\",\"keywords\":[\"migration\",\"NiFi\"],\"articleSection\":[\"Couchbase Server\"],\"inLanguage\":\"pt-BR\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/nifi-processing-flow-couchbase-server\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/nifi-processing-flow-couchbase-server\/\",\"url\":\"https:\/\/www.couchbase.com\/blog\/nifi-processing-flow-couchbase-server\/\",\"name\":\"Getting Started with NiFi and Couchbase Server - The Couchbase Blog\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/nifi-processing-flow-couchbase-server\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/nifi-processing-flow-couchbase-server\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/05\/107-hero-couchbase-team-and-mr-redlegs.jpg\",\"datePublished\":\"2018-05-21T13:45:33+00:00\",\"dateModified\":\"2025-06-14T02:28:11+00:00\",\"description\":\"NiFi automates data flow, providing migration, synchronization, and more. Learn how the Cincinnati Reds baseball club uses NiFi to help with ticketing.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/nifi-processing-flow-couchbase-server\/#breadcrumb\"},\"inLanguage\":\"pt-BR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/nifi-processing-flow-couchbase-server\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/nifi-processing-flow-couchbase-server\/#primaryimage\",\"url\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/05\/107-hero-couchbase-team-and-mr-redlegs.jpg\",\"contentUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/05\/107-hero-couchbase-team-and-mr-redlegs.jpg\",\"width\":823,\"height\":404,\"caption\":\"Mr. Redlegs and Couchbase together again\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/nifi-processing-flow-couchbase-server\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.couchbase.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Getting Started with NiFi and Couchbase Server\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#website\",\"url\":\"https:\/\/www.couchbase.com\/blog\/\",\"name\":\"The Couchbase Blog\",\"description\":\"Couchbase, the NoSQL Database\",\"publisher\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.couchbase.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"pt-BR\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\",\"name\":\"The Couchbase Blog\",\"url\":\"https:\/\/www.couchbase.com\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png\",\"contentUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png\",\"width\":218,\"height\":34,\"caption\":\"The Couchbase Blog\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/3929663e372020321b0152dc4fa65a58\",\"name\":\"Matthew Groves\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/ba51e6aacc53995c323a634e4502ef54\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/70feb1b28a099ad0112b8d21fe1e81e1a4524beed3e20b7f107d5370e85a07ab?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/70feb1b28a099ad0112b8d21fe1e81e1a4524beed3e20b7f107d5370e85a07ab?s=96&d=mm&r=g\",\"caption\":\"Matthew Groves\"},\"description\":\"Matthew D. Groves is a guy who loves to code. It doesn't matter if it's C#, jQuery, or PHP: he'll submit pull requests for anything. He has been coding professionally ever since he wrote a QuickBASIC point-of-sale app for his parent's pizza shop back in the 90s. He currently works as a Senior Product Marketing Manager for Couchbase. His free time is spent with his family, watching the Reds, and getting involved in the developer community. He is the author of AOP in .NET, Pro Microservices in .NET, a Pluralsight author, and a Microsoft MVP.\",\"sameAs\":[\"https:\/\/crosscuttingconcerns.com\",\"https:\/\/x.com\/mgroves\"],\"url\":\"https:\/\/www.couchbase.com\/blog\/pt\/author\/matthew-groves\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Getting Started with NiFi and Couchbase Server - The Couchbase Blog","description":"O NiFi automatiza o fluxo de dados, fornecendo migra\u00e7\u00e3o, sincroniza\u00e7\u00e3o e muito mais. Saiba como o clube de beisebol Cincinnati Reds usa o NiFi para ajudar na emiss\u00e3o de ingressos.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.couchbase.com\/blog\/pt\/nifi-processing-flow-couchbase-server\/","og_locale":"pt_BR","og_type":"article","og_title":"Getting Started with NiFi and Couchbase Server","og_description":"NiFi automates data flow, providing migration, synchronization, and more. Learn how the Cincinnati Reds baseball club uses NiFi to help with ticketing.","og_url":"https:\/\/www.couchbase.com\/blog\/pt\/nifi-processing-flow-couchbase-server\/","og_site_name":"The Couchbase Blog","article_published_time":"2018-05-21T13:45:33+00:00","article_modified_time":"2025-06-14T02:28:11+00:00","og_image":[{"width":823,"height":404,"url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/05\/107-hero-couchbase-team-and-mr-redlegs.jpg","type":"image\/jpeg"}],"author":"Matthew Groves","twitter_card":"summary_large_image","twitter_creator":"@mgroves","twitter_misc":{"Written by":"Matthew Groves","Est. reading time":"11 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.couchbase.com\/blog\/nifi-processing-flow-couchbase-server\/#article","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/nifi-processing-flow-couchbase-server\/"},"author":{"name":"Matthew Groves","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/3929663e372020321b0152dc4fa65a58"},"headline":"Getting Started with NiFi and Couchbase Server","datePublished":"2018-05-21T13:45:33+00:00","dateModified":"2025-06-14T02:28:11+00:00","mainEntityOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/nifi-processing-flow-couchbase-server\/"},"wordCount":2052,"commentCount":0,"publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/nifi-processing-flow-couchbase-server\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/05\/107-hero-couchbase-team-and-mr-redlegs.jpg","keywords":["migration","NiFi"],"articleSection":["Couchbase Server"],"inLanguage":"pt-BR","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.couchbase.com\/blog\/nifi-processing-flow-couchbase-server\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.couchbase.com\/blog\/nifi-processing-flow-couchbase-server\/","url":"https:\/\/www.couchbase.com\/blog\/nifi-processing-flow-couchbase-server\/","name":"Getting Started with NiFi and Couchbase Server - The Couchbase Blog","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/nifi-processing-flow-couchbase-server\/#primaryimage"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/nifi-processing-flow-couchbase-server\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/05\/107-hero-couchbase-team-and-mr-redlegs.jpg","datePublished":"2018-05-21T13:45:33+00:00","dateModified":"2025-06-14T02:28:11+00:00","description":"O NiFi automatiza o fluxo de dados, fornecendo migra\u00e7\u00e3o, sincroniza\u00e7\u00e3o e muito mais. Saiba como o clube de beisebol Cincinnati Reds usa o NiFi para ajudar na emiss\u00e3o de ingressos.","breadcrumb":{"@id":"https:\/\/www.couchbase.com\/blog\/nifi-processing-flow-couchbase-server\/#breadcrumb"},"inLanguage":"pt-BR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.couchbase.com\/blog\/nifi-processing-flow-couchbase-server\/"]}]},{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/www.couchbase.com\/blog\/nifi-processing-flow-couchbase-server\/#primaryimage","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/05\/107-hero-couchbase-team-and-mr-redlegs.jpg","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/05\/107-hero-couchbase-team-and-mr-redlegs.jpg","width":823,"height":404,"caption":"Mr. Redlegs and Couchbase together again"},{"@type":"BreadcrumbList","@id":"https:\/\/www.couchbase.com\/blog\/nifi-processing-flow-couchbase-server\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.couchbase.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Getting Started with NiFi and Couchbase Server"}]},{"@type":"WebSite","@id":"https:\/\/www.couchbase.com\/blog\/#website","url":"https:\/\/www.couchbase.com\/blog\/","name":"Blog do Couchbase","description":"Couchbase, o banco de dados NoSQL","publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.couchbase.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"pt-BR"},{"@type":"Organization","@id":"https:\/\/www.couchbase.com\/blog\/#organization","name":"Blog do Couchbase","url":"https:\/\/www.couchbase.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png","width":218,"height":34,"caption":"The Couchbase Blog"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/3929663e372020321b0152dc4fa65a58","name":"Matthew Groves","image":{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/ba51e6aacc53995c323a634e4502ef54","url":"https:\/\/secure.gravatar.com\/avatar\/70feb1b28a099ad0112b8d21fe1e81e1a4524beed3e20b7f107d5370e85a07ab?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/70feb1b28a099ad0112b8d21fe1e81e1a4524beed3e20b7f107d5370e85a07ab?s=96&d=mm&r=g","caption":"Matthew Groves"},"description":"Matthew D. Groves \u00e9 um cara que adora programar. N\u00e3o importa se \u00e9 C#, jQuery ou PHP: ele enviar\u00e1 solicita\u00e7\u00f5es de pull para qualquer coisa. Ele tem programado profissionalmente desde que escreveu um aplicativo de ponto de venda QuickBASIC para a pizzaria de seus pais nos anos 90. Atualmente, ele trabalha como gerente s\u00eanior de marketing de produtos da Couchbase. Seu tempo livre \u00e9 passado com a fam\u00edlia, assistindo aos Reds e participando da comunidade de desenvolvedores. Ele \u00e9 autor de AOP in .NET, Pro Microservices in .NET, autor da Pluralsight e Microsoft MVP.","sameAs":["https:\/\/crosscuttingconcerns.com","https:\/\/x.com\/mgroves"],"url":"https:\/\/www.couchbase.com\/blog\/pt\/author\/matthew-groves\/"}]}},"authors":[{"term_id":8937,"user_id":71,"is_guest":0,"slug":"matthew-groves","display_name":"Matthew Groves","avatar_url":"https:\/\/secure.gravatar.com\/avatar\/70feb1b28a099ad0112b8d21fe1e81e1a4524beed3e20b7f107d5370e85a07ab?s=96&d=mm&r=g","author_category":"","last_name":"Groves","first_name":"Matthew","job_title":"","user_url":"https:\/\/crosscuttingconcerns.com","description":"Matthew D. Groves \u00e9 um cara que adora programar.  N\u00e3o importa se \u00e9 C#, jQuery ou PHP: ele enviar\u00e1 solicita\u00e7\u00f5es de pull para qualquer coisa.  Ele tem programado profissionalmente desde que escreveu um aplicativo de ponto de venda QuickBASIC para a pizzaria de seus pais nos anos 90.  Atualmente, ele trabalha como gerente s\u00eanior de marketing de produtos da Couchbase. Seu tempo livre \u00e9 passado com a fam\u00edlia, assistindo aos Reds e participando da comunidade de desenvolvedores.  Ele \u00e9 autor de AOP in .NET, Pro Microservices in .NET, autor da Pluralsight e Microsoft MVP."}],"_links":{"self":[{"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/posts\/5155","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/users\/71"}],"replies":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/comments?post=5155"}],"version-history":[{"count":0,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/posts\/5155\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/media\/5162"}],"wp:attachment":[{"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/media?parent=5155"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/categories?post=5155"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/tags?post=5155"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/ppma_author?post=5155"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}