{"id":2010,"date":"2016-01-21T19:13:26","date_gmt":"2016-01-21T19:13:26","guid":{"rendered":"https:\/\/www.couchbase.com\/blog\/?p=2010"},"modified":"2020-02-03T04:33:05","modified_gmt":"2020-02-03T12:33:05","slug":"kafka-and-couchbase-up-and-running-in-10-minutes","status":"publish","type":"post","link":"https:\/\/www.couchbase.com\/blog\/es\/kafka-and-couchbase-up-and-running-in-10-minutes\/","title":{"rendered":"Kafka y Couchbase: Puesta en marcha con el consumidor Kafka de ejemplo en 10 minutos"},"content":{"rendered":"<h2>Introducci\u00f3n<\/h2>\n<p>Couchbase Kafka Connector 1.2.0 acaba de ser enviado. Junto con las diversas correcciones de errores, hay un nuevo c\u00f3digo de ejemplo para un consumidor Kafka, adem\u00e1s del productor Kafka que estaba disponible anteriormente. Para revisar r\u00e1pidamente las condiciones:<\/p>\n<ul>\n<li>Un productor de Kafka escribe datos en Kafka, por lo que es una fuente de mensajes desde la perspectiva de Kafka.<\/li>\n<li>Un consumidor en la terminolog\u00eda de Kafka es un proceso que se suscribe a temas y luego hace algo con la alimentaci\u00f3n de mensajes publicados que se emiten desde un cl\u00faster Kafka. Es b\u00e1sicamente un sumidero.<\/li>\n<\/ul>\n<p>En este blog, pondr\u00e1s en marcha un ejemplo de consumidor Kafka al estilo \"\u00a1Hola Mundo!\" que escribe en Couchbase. En el camino, tambi\u00e9n obtendr\u00e1s un entorno sandbox con un broker Kafka y un \u00fanico nodo Couchbase Server para que puedas ejecutar y modificar el consumidor y productor de ejemplo.<\/p>\n<h2>Instalaci\u00f3n Requisitos previos<\/h2>\n<p>En <a href=\"https:\/\/github.com\/couchbase\/couchbase-kafka-connector\/tree\/master\/samples\">muestras<\/a> forman parte del <a href=\"https:\/\/github.com\/couchbase\/couchbase-kafka-connector\">Conector Kafka de Couchbase<\/a> \u00e1rbol fuente. Para obtenerlos, basta con clonar todo el repositorio:<\/p>\n<pre><code class=\"language-bash\">$ git clone git:\/\/github.com\/couchbase\/couchbase-kafka-connector.git \/tmp\/kafka-connector<\/code><\/pre>\n<p>Ahora, vamos a configurar tu entorno de pruebas usando im\u00e1genes pre-configuradas de Kafka y Couchbase Server. Tienes que instalar Vagrant, VirtualBox y Ansible para configurarlos localmente. Si tienes estos servicios instalados en otro lugar, aseg\u00farate de ajustar las direcciones de host a lo largo de esta gu\u00eda apropiadamente.<\/p>\n<pre><code class=\"language-bash\">$ cd \/tmp\/kafka-connector\/env<\/code><\/pre>\n<p>Compruebe las versiones de las dependencias:<\/p>\n<pre><code class=\"language-bash\">$ ansible --version\r\n$ vboxmanage --version\r\n$ vagrant -v<\/code><\/pre>\n<p>Puede asignar nombres legibles por humanos a las cajas utilizando el plugin para Vagrant. Si a\u00fan no lo tienes instalado, utiliza el siguiente comando:<\/p>\n<pre><code class=\"language-bash\">$ vagrant plugin install vagrant-hostsupdater<\/code><\/pre>\n<p>Ahora ya puedes aprovisionar los servidores y ponerte en marcha:<\/p>\n<pre><code>$ vagrant up<\/code><\/pre>\n<p>Nota: Si un servidor no se instala debido a los tiempos de espera, vuelva a intentar \"vagrant up\" despu\u00e9s de unos minutos y puede que funcione.<\/p>\n<p>Compruebe que los hosts responden:<\/p>\n<pre><code class=\"language-bash\">$ ping couchbase1.vagrant\r\n$ ping kafka1.vagrant<\/code><\/pre>\n<p>Si navegas a deber\u00edas poder ver tu Couchbase Server de nodo \u00fanico configurado con credenciales\u00a0<code style=\"box-sizing: border-box; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; font-size: 13.6px; padding: 0.2em 0px; margin: 0px; border-radius: 3px; background-color: rgba(0, 0, 0, 0.0392157);\">Administrador<\/code>\/<code style=\"box-sizing: border-box; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; font-size: 13.6px; padding: 0.2em 0px; margin: 0px; border-radius: 3px; background-color: rgba(0, 0, 0, 0.0392157);\">contrase\u00f1a<\/code>.<\/p>\n<h2>Construcci\u00f3n de las muestras<\/h2>\n<p>Para evitar cualquier problema de classpath, utilice maven para crear un archivo JAR aut\u00f3nomo para cada aplicaci\u00f3n de ejemplo.<\/p>\n<p>La aplicaci\u00f3n generadora es una aplicaci\u00f3n CLI m\u00ednima. Utiliza el SDK Java de Couchbase para envolver l\u00edneas de entrada desde STDIN en documentos JSON y los env\u00eda al bucket \"por defecto\" en Couchbase Server:<\/p>\n<pre><code class=\"language-bash\">$ cd \/tmp\/kafka-connector\/samples\/generator\r\n$ mvn assembly:assembly<\/code><\/pre>\n<p>El productor se conecta a Couchbase Server y transmite todas las mutaciones a Kafka. Esta aplicaci\u00f3n utiliza el proyecto couchbase-kafka-connector entre bastidores.<\/p>\n<pre><code class=\"language-bash\">$ cd \/tmp\/kafka-connector\/samples\/producer\r\n$ mvn assembly:assembly<\/code><\/pre>\n<p>El consumidor es un consumidor t\u00edpico de Kafka, que por defecto env\u00eda cualquier mensaje entrante en el tema \"default\" a STDOUT.<\/p>\n<pre><code class=\"language-bash\">$ cd \/tmp\/kafka-connector\/samples\/consumer\r\n$ mvn assembly:assembly\r\n<\/code><\/pre>\n<h2>Ejecuci\u00f3n de las muestras<\/h2>\n<p>Ahora que lo tienes todo preparado, es el momento de ejecutar todas las muestras. Necesitar\u00e1s tres sesiones shell diferentes porque cada una de ellas ejecuta un proceso hasta que se detiene. Asumiremos que est\u00e1s en la sesi\u00f3n <span style=\"color: #333333; font-family: 'Helvetica Neue', Helvetica, 'Segoe UI', Arial, freesans, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; font-size: 16px; line-height: 25.6px; text-align: start;\">\u00a0<\/span><code style=\"box-sizing: border-box; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; font-size: 13.6px; padding: 0.2em 0px; margin: 0px; border-radius: 3px; color: #333333; text-align: start; background-color: rgba(0, 0, 0, 0.0392157);\">\/tmp\/conector-kafka\/muestras<\/code><span style=\"color: #333333; font-family: 'Helvetica Neue', Helvetica, 'Segoe UI', Arial, freesans, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; font-size: 16px; line-height: 25.6px; text-align: start;\">\u00a0<\/span>directorio.<\/p>\n<p>En primer lugar, pon en marcha el generador:<\/p>\n<pre><code class=\"language-bash\">$ java -jar generator\/target\/kafka-samples-generator-1.0-SNAPSHOT-jar-with-dependencies.jar\r\n<\/code><\/pre>\n<p>Deber\u00eda mostrar la configuraci\u00f3n de la conexi\u00f3n y, a continuaci\u00f3n, pasar al s\u00edmbolo del sistema<span style=\"color: #333333; font-family: 'Helvetica Neue', Helvetica, 'Segoe UI', Arial, freesans, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; font-size: 16px; line-height: 25.6px; text-align: start;\">\u00a0<\/span><code style=\"box-sizing: border-box; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; font-size: 13.6px; padding: 0.2em 0px; margin: 0px; border-radius: 3px; color: #333333; text-align: start; background-color: rgba(0, 0, 0, 0.0392157);\">&gt;<\/code>. Puede escribir cualquier cosa all\u00ed y verificar que se est\u00e1 creando correctamente mirando en la interfaz de usuario de administraci\u00f3n del servidor Couchbase:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-8157 size-full\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2016\/01\/Couchbase-and-kafka.png\" alt=\"\" width=\"1281\" height=\"648\" srcset=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2016\/01\/Couchbase-and-kafka.png 1281w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2016\/01\/Couchbase-and-kafka-300x152.png 300w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2016\/01\/Couchbase-and-kafka-1024x518.png 1024w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2016\/01\/Couchbase-and-kafka-768x388.png 768w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2016\/01\/Couchbase-and-kafka-20x10.png 20w\" sizes=\"auto, (max-width: 1281px) 100vw, 1281px\" \/><\/p>\n<p>Documentos del generador en el cubo<\/p>\n<pre><code class=\"language-bash\">...\r\nINFO: Opened bucket default\r\n&gt; hello, kafka demo!\r\n&gt;&gt; key=key-5, value={\"line\":\"hello, kafka demo!\"}\r\n<\/code><\/pre>\n<p>En este momento puedes ejecutar el ejemplo de conector<\/p>\n<pre><code class=\"language-bash\">$ java -jar producer\/target\/kafka-samples-producer-1.0-SNAPSHOT-jar-with-dependencies.jar<\/code><\/pre>\n<p>Por cada l\u00ednea que escriba en el generador, ver\u00e1 una l\u00ednea del productor como \u00e9sta:<\/p>\n<pre><code class=\"language-bash\">RECEIVED: com.couchbase.kafka.DCPEvent@4e44cb88<\/code><\/pre>\n<p>La muestra lo escribe justo antes de enviar la carga \u00fatil a Kafka, en la implementaci\u00f3n de la clase filtro. Comprobemos c\u00f3mo recibe Kafka estos mensajes.<\/p>\n<pre><code class=\"language-bash\">$ java -jar consumer\/target\/kafka-samples-consumer-1.0-SNAPSHOT-jar-with-dependencies.jar\r\n1: {\"line\":\"hello, kafka demo!\"}\r\n2: {\"line\":\"hello, this is a test\"}<\/code><\/pre>\n<p>Puedes seguir jugando con \u00e9l mientras los tres servicios est\u00e9n en marcha.<\/p>\n<h2>Desarrollando con Couchbase Kafka Connector<\/h2>\n<p>Sigamos adelante y echemos un vistazo al c\u00f3digo. Las tres aplicaciones son bastante amigables para los experimentos, por ejemplo, el generador cabe en unas pocas l\u00edneas:<\/p>\n<pre><code class=\"language-java\">public class Example {\r\n    public static void main(String args[]) throws IOException {\r\n        Random random = new Random();\r\n        Cluster cluster = CouchbaseCluster.create(\"couchbase1.vagrant\");\r\n        Bucket bucket = cluster.openBucket();\r\n        BufferedReader input = new BufferedReader(new InputStreamReader(System.in));\r\n        String line;\r\n        do {\r\n            System.out.print(\"&gt; \");\r\n            line = input.readLine();\r\n            if (line == null) {\r\n                break;\r\n            }\r\n            String key = \"key-\" + random.nextInt(10);\r\n            JsonObject value = JsonObject.create().put(\"line\", line);\r\n            bucket.upsert(JsonDocument.create(key, value));\r\n            System.out.printf(\"&gt;&gt; key=%s, value=%sn\", key, value);\r\n        } while (true);\r\n    }\r\n}<\/code><\/pre>\n<p>B\u00e1sicamente, el generador abre una conexi\u00f3n al bucket \"default\" en tu instancia \"couchbase1.vagrant\" y escribe tus mensajes en claves aleatorias. Puedes extenderlo para enviar otros tipos de eventos. Otra cosa que puedes intentar es eliminar claves.<\/p>\n<p>Por defecto, Couchbase Connector para Kafka se ejecuta en modo servidor, donde toma prestado el hilo activo y escucha activamente a Couchbase Server en busca de nuevos eventos. Hay varios puntos donde puedes aplicar tus ideas o cambios. El m\u00e1s obvio es el constructor de configuraci\u00f3n, donde no s\u00f3lo especificas las credenciales y direcciones de los servicios a los que te conectas, sino que tambi\u00e9n puedes especificar varias clases de serializadores y filtros.<\/p>\n<p>La aplicaci\u00f3n de ejemplo implementa varias de ellas. La clase Filter es la m\u00e1s sencilla:<\/p>\n<pre><code class=\"language-java\">\r\npublic class SampleFilter implements Filter {\r\n\u00a0 \u00a0 @Override\r\n\u00a0 \u00a0 public boolean pass(DCPEvent dcpEvent) {\r\n\u00a0 \u00a0 \u00a0 \u00a0 System.out.println(\"RECEIVED: \" + dcpEvent);\r\n\u00a0 \u00a0 \u00a0 \u00a0 return true;\r\n\u00a0 \u00a0 }\r\n}\r\n<\/code><\/pre>\n<p>Aqu\u00ed puedes poner las comprobaciones personalizadas que quieras, y si<span style=\"color: #333333; font-family: 'Helvetica Neue', Helvetica, 'Segoe UI', Arial, freesans, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; font-size: 16px; line-height: 25.6px; text-align: start;\">\u00a0<\/span><code style=\"box-sizing: border-box; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; font-size: 13.6px; padding: 0.2em 0px; margin: 0px; border-radius: 3px; color: #333333; text-align: start; background-color: rgba(0, 0, 0, 0.0392157);\">pasar()<\/code><span style=\"color: #333333; font-family: 'Helvetica Neue', Helvetica, 'Segoe UI', Arial, freesans, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; font-size: 16px; line-height: 25.6px; text-align: start;\">\u00a0<\/span>devuelve <span style=\"color: #333333; font-family: 'Helvetica Neue', Helvetica, 'Segoe UI', Arial, freesans, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; font-size: 16px; line-height: 25.6px; text-align: start;\">\u00a0<\/span><code style=\"box-sizing: border-box; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; font-size: 13.6px; padding: 0.2em 0px; margin: 0px; border-radius: 3px; color: #333333; text-align: start; background-color: rgba(0, 0, 0, 0.0392157);\">falso<\/code>el conector descarta el mensaje y no lo env\u00eda a Kafka.<\/p>\n<p>Default Encoder, que viene con la distribuci\u00f3n del conector, intenta representar cada mensaje como JSON, pero eso probablemente no es lo que necesitas, as\u00ed que puedes aplicar y conversi\u00f3n a<span style=\"color: #333333; font-family: 'Helvetica Neue', Helvetica, 'Segoe UI', Arial, freesans, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; font-size: 16px; line-height: 25.6px; text-align: start;\">\u00a0<\/span><code style=\"box-sizing: border-box; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; font-size: 13.6px; padding: 0.2em 0px; margin: 0px; border-radius: 3px; color: #333333; text-align: start; background-color: rgba(0, 0, 0, 0.0392157);\">Evento DCPEvent<\/code><span style=\"color: #333333; font-family: 'Helvetica Neue', Helvetica, 'Segoe UI', Arial, freesans, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; font-size: 16px; line-height: 25.6px; text-align: start;\">\u00a0<\/span>y devuelve una matriz de bytes que se almacenar\u00e1 en Kafka. En este ejemplo, solo convertimos los eventos a su representaci\u00f3n de cadena.<\/p>\n<pre><code class=\"language-java\">\r\npublic class SampleEncoder extends AbstractEncoder {\r\n\u00a0 \u00a0 public SampleEncoder(final VerifiableProperties properties) {\r\n\u00a0 \u00a0 \u00a0 \u00a0 super(properties);\r\n\u00a0 \u00a0 }\r\n\r\n\r\n\u00a0 \u00a0 @Override\r\n\u00a0 \u00a0 public byte[] toBytes(final DCPEvent dcpEvent) {\r\n\u00a0 \u00a0 \u00a0 \u00a0 if (dcpEvent.message() instanceof MutationMessage) {\r\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 MutationMessage message = (MutationMessage) dcpEvent.message();\r\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 return message.content().toString(CharsetUtil.UTF_8).getBytes();\r\n\u00a0 \u00a0 \u00a0 \u00a0 } else {\r\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 return dcpEvent.message().toString().getBytes();\r\n\u00a0 \u00a0 \u00a0 \u00a0 }\r\n\u00a0 \u00a0 }\r\n}\r\n<\/code><\/pre>\n<p>Un ajuste m\u00e1s avanzado es<span style=\"color: #333333; font-family: 'Helvetica Neue', Helvetica, 'Segoe UI', Arial, freesans, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; font-size: 16px; line-height: 25.6px; text-align: start;\">\u00a0<\/span><code style=\"box-sizing: border-box; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; font-size: 13.6px; padding: 0.2em 0px; margin: 0px; border-radius: 3px; color: #333333; text-align: start; background-color: rgba(0, 0, 0, 0.0392157);\">SerializadorEstado<\/code><span style=\"color: #333333; font-family: 'Helvetica Neue', Helvetica, 'Segoe UI', Arial, freesans, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; font-size: 16px; line-height: 25.6px; text-align: start;\">\u00a0<\/span>de Couchbase. Implement\u00e1ndolo, puedes controlar c\u00f3mo la librer\u00eda rastrear\u00e1 los cursores de flujo (es decir, los n\u00fameros de secuencia para cada partici\u00f3n dentro de Couchbase Server), y si se reanudar\u00e1 despu\u00e9s de reiniciar el conector. Hay una implementaci\u00f3n Zookeeper del serializador de estado en la distribuci\u00f3n. Aqu\u00ed en el ejemplo, hemos implementado <code style=\"box-sizing: border-box; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; font-size: 13.6px; padding: 0.2em 0px; margin: 0px; border-radius: 3px; color: #333333; text-align: start; background-color: rgba(0, 0, 0, 0.0392157);\">NullStateSerializer<\/code><span style=\"color: #333333; font-family: 'Helvetica Neue', Helvetica, 'Segoe UI', Arial, freesans, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; font-size: 16px; line-height: 25.6px; text-align: start;\">\u00a0<\/span>que no persiste nada, pero muestra una implementaci\u00f3n m\u00ednima.<\/p>\n<pre><code class=\"language-java\">\r\npublic class NullStateSerializer implements StateSerializer {\r\n\u00a0 \u00a0 public NullStateSerializer(final CouchbaseKafkaEnvironment environment) {\r\n\u00a0 \u00a0 }\r\n\r\n\u00a0 \u00a0 @Override\r\n\u00a0 \u00a0 public void dump(BucketStreamAggregatorState aggregatorState) {\r\n\u00a0 \u00a0 }\r\n\r\n\u00a0 \u00a0 @Override\r\n\u00a0 \u00a0 public void dump(BucketStreamAggregatorState aggregatorState, short partition) {\r\n\u00a0 \u00a0 }\r\n\r\n\u00a0 \u00a0 @Override\r\n\u00a0 \u00a0 public BucketStreamAggregatorState load(BucketStreamAggregatorState aggregatorState) {\r\n\u00a0 \u00a0 \u00a0 \u00a0 return new BucketStreamAggregatorState(aggregatorState.name());\r\n\u00a0 \u00a0 }\r\n\r\n\u00a0 \u00a0 @Override\r\n\u00a0 \u00a0 public BucketStreamState load(BucketStreamAggregatorState aggregatorState, short partition) {\r\n\u00a0 \u00a0 \u00a0 \u00a0 return new BucketStreamState(partition, 0, 0, 0xffffffff, 0, 0xffffffff);\r\n\u00a0 \u00a0 }\r\n}\r\n<\/code><\/pre>\n<p>El \u00faltimo componente de su cl\u00faster de demostraci\u00f3n es el consumidor Kafka<span style=\"color: #333333; font-family: 'Helvetica Neue', Helvetica, 'Segoe UI', Arial, freesans, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; font-size: 16px; line-height: 25.6px; text-align: start;\">\u00a0<\/span><code style=\"box-sizing: border-box; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; font-size: 13.6px; padding: 0.2em 0px; margin: 0px; border-radius: 3px; color: #333333; text-align: start; background-color: rgba(0, 0, 0, 0.0392157);\">ConsumidorAbstracto<\/code>que es un ejemplo bastante t\u00edpico de consumidor. Consta de dos partes: , que implementa el arranque y el posicionamiento en el tema Kafka, y <span style=\"color: #333333; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; font-size: 13.6px; line-height: 21.76px; text-align: start; background-color: rgba(0, 0, 0, 0.0392157);\">ImprimirConsumidor<\/span>que lleva su \"l\u00f3gica de negocio\", o simplemente emite cada mensaje que se le pasa por <span style=\"color: #333333; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; font-size: 13.6px; line-height: 21.76px; text-align: start; background-color: rgba(0, 0, 0, 0.0392157);\">ConsumidorAbstracto<\/span>:<\/p>\n<pre><code class=\"language-java\">\r\npublic class PrintConsumer extends AbstractConsumer {\r\n\u00a0 \u00a0 public PrintConsumer(String[] seedBrokers, int port) {\r\n\u00a0 \u00a0 \u00a0 \u00a0 super(seedBrokers, port);\r\n\u00a0 \u00a0 }\r\n\r\n\r\n\u00a0 \u00a0 public PrintConsumer(String seedBroker, int port) {\r\n\u00a0 \u00a0 \u00a0 \u00a0 super(seedBroker, port);\r\n\u00a0 \u00a0 }\r\n\r\n\r\n\u00a0 \u00a0 @Override\r\n\u00a0 \u00a0 public void handleMessage(long offset, byte[] bytes) {\r\n\u00a0 \u00a0 \u00a0 \u00a0 System.out.println(String.valueOf(offset) + \": \" + new String(bytes));\r\n\u00a0 \u00a0 }\r\n}\r\n<\/code><\/pre>\n<p>Como en los otros ejemplos aqu\u00ed, puedes jugar modificando el consumidor de ejemplo. Incluso puedes cerrar el circuito enviando todo de vuelta a Couchbase Server. Kafka es software distribuido, al igual que Couchbase Server, as\u00ed que tenlo en cuenta cuando ejecutes en tu propio cluster y ajusta la funci\u00f3n main() en consecuencia. En nuestro ejemplo, s\u00f3lo tenemos una \u00fanica partici\u00f3n, partition (<span style=\"color: #333333; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; font-size: 13.6px; line-height: 21.76px; text-align: start; background-color: rgba(0, 0, 0, 0.0392157);\">0<\/span>) en Kafka, por lo que nuestro principal tiene este aspecto:<\/p>\n<pre><code class=\"language-java\">public class Example {\r\n    public static void main(String args[]) {\r\n        PrintConsumer example = new PrintConsumer(\"kafka1.vagrant\", 9092);\r\n        example.run(\"default\", 0);\r\n    }\r\n}<\/code><\/pre>\n<p>Por supuesto, en un cl\u00faster de producci\u00f3n se ejecutar\u00e1 m\u00e1s de una partici\u00f3n.<\/p>\n<h2>Conclusi\u00f3n<\/h2>\n<p>Espero que esto te ayude a empezar con buen pie con Couchbase y Kafka. Gracias.<\/p>","protected":false},"excerpt":{"rendered":"<p>Intro Couchbase Kafka Connector 1.2.0 just shipped. Along with the various bug fixes, there is new sample code for a Kafka consumer in addition to the Kafka producer that was previously available. To quickly review the terms: A Kafka producer [&hellip;]<\/p>","protected":false},"author":25,"featured_media":13873,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[1],"tags":[1295,1487],"ppma_author":[8995],"class_list":["post-2010","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-uncategorized","tag-connectors","tag-kafka"],"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>Up &amp; Running with the Sample Kafka Consumer in 10 Minutes<\/title>\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\/es\/kafka-and-couchbase-up-and-running-in-10-minutes\/\" \/>\n<meta property=\"og:locale\" content=\"es_MX\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Kafka and Couchbase: Up and Running with the Sample Kafka Consumer in 10 Minutes\" \/>\n<meta property=\"og:description\" content=\"Intro Couchbase Kafka Connector 1.2.0 just shipped. Along with the various bug fixes, there is new sample code for a Kafka consumer in addition to the Kafka producer that was previously available. To quickly review the terms: A Kafka producer [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.couchbase.com\/blog\/es\/kafka-and-couchbase-up-and-running-in-10-minutes\/\" \/>\n<meta property=\"og:site_name\" content=\"The Couchbase Blog\" \/>\n<meta property=\"article:published_time\" content=\"2016-01-21T19:13:26+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2020-02-03T12:33:05+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2022\/11\/couchbase-nosql-dbaas.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1800\" \/>\n\t<meta property=\"og:image:height\" content=\"630\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Sergey Avseyev, SDK Engineer, Couchbase\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@avsej\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Sergey Avseyev, SDK Engineer, Couchbase\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"7 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/kafka-and-couchbase-up-and-running-in-10-minutes\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/kafka-and-couchbase-up-and-running-in-10-minutes\/\"},\"author\":{\"name\":\"Sergey Avseyev, SDK Engineer, Couchbase\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/e9181374f225c90084ec3ba86bdcfa2e\"},\"headline\":\"Kafka and Couchbase: Up and Running with the Sample Kafka Consumer in 10 Minutes\",\"datePublished\":\"2016-01-21T19:13:26+00:00\",\"dateModified\":\"2020-02-03T12:33:05+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/kafka-and-couchbase-up-and-running-in-10-minutes\/\"},\"wordCount\":1013,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/kafka-and-couchbase-up-and-running-in-10-minutes\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"keywords\":[\"connectors\",\"kafka\"],\"articleSection\":[\"Uncategorized\"],\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/kafka-and-couchbase-up-and-running-in-10-minutes\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/kafka-and-couchbase-up-and-running-in-10-minutes\/\",\"url\":\"https:\/\/www.couchbase.com\/blog\/kafka-and-couchbase-up-and-running-in-10-minutes\/\",\"name\":\"Up & Running with the Sample Kafka Consumer in 10 Minutes\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/kafka-and-couchbase-up-and-running-in-10-minutes\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/kafka-and-couchbase-up-and-running-in-10-minutes\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"datePublished\":\"2016-01-21T19:13:26+00:00\",\"dateModified\":\"2020-02-03T12:33:05+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/kafka-and-couchbase-up-and-running-in-10-minutes\/#breadcrumb\"},\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/kafka-and-couchbase-up-and-running-in-10-minutes\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/kafka-and-couchbase-up-and-running-in-10-minutes\/#primaryimage\",\"url\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"contentUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"width\":1800,\"height\":630},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/kafka-and-couchbase-up-and-running-in-10-minutes\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.couchbase.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Kafka and Couchbase: Up and Running with the Sample Kafka Consumer in 10 Minutes\"}]},{\"@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\":\"es\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\",\"name\":\"The Couchbase Blog\",\"url\":\"https:\/\/www.couchbase.com\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@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\/e9181374f225c90084ec3ba86bdcfa2e\",\"name\":\"Sergey Avseyev, SDK Engineer, Couchbase\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/796ab283bd56fe3716a102ebe16daff6\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/288a892d231cf8c4e57ed0643e4681b4654a141361f6ec3c5b79ccd4d885e038?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/288a892d231cf8c4e57ed0643e4681b4654a141361f6ec3c5b79ccd4d885e038?s=96&d=mm&r=g\",\"caption\":\"Sergey Avseyev, SDK Engineer, Couchbase\"},\"description\":\"Sergey Avseyev is a SDK Engineer at Couchbase. Sergey Avseyev is responsible for development of Kafka connector, and underlying library, which implements DCP, Couchbase replication protocol. Also maintaining PHP SDK for Couchbase.\",\"sameAs\":[\"https:\/\/x.com\/avsej\"],\"url\":\"https:\/\/www.couchbase.com\/blog\/es\/author\/sergey-avseyev\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Up & Running with the Sample Kafka Consumer in 10 Minutes","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\/es\/kafka-and-couchbase-up-and-running-in-10-minutes\/","og_locale":"es_MX","og_type":"article","og_title":"Kafka and Couchbase: Up and Running with the Sample Kafka Consumer in 10 Minutes","og_description":"Intro Couchbase Kafka Connector 1.2.0 just shipped. Along with the various bug fixes, there is new sample code for a Kafka consumer in addition to the Kafka producer that was previously available. To quickly review the terms: A Kafka producer [&hellip;]","og_url":"https:\/\/www.couchbase.com\/blog\/es\/kafka-and-couchbase-up-and-running-in-10-minutes\/","og_site_name":"The Couchbase Blog","article_published_time":"2016-01-21T19:13:26+00:00","article_modified_time":"2020-02-03T12:33:05+00:00","og_image":[{"width":1800,"height":630,"url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2022\/11\/couchbase-nosql-dbaas.png","type":"image\/png"}],"author":"Sergey Avseyev, SDK Engineer, Couchbase","twitter_card":"summary_large_image","twitter_creator":"@avsej","twitter_misc":{"Written by":"Sergey Avseyev, SDK Engineer, Couchbase","Est. reading time":"7 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.couchbase.com\/blog\/kafka-and-couchbase-up-and-running-in-10-minutes\/#article","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/kafka-and-couchbase-up-and-running-in-10-minutes\/"},"author":{"name":"Sergey Avseyev, SDK Engineer, Couchbase","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/e9181374f225c90084ec3ba86bdcfa2e"},"headline":"Kafka and Couchbase: Up and Running with the Sample Kafka Consumer in 10 Minutes","datePublished":"2016-01-21T19:13:26+00:00","dateModified":"2020-02-03T12:33:05+00:00","mainEntityOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/kafka-and-couchbase-up-and-running-in-10-minutes\/"},"wordCount":1013,"commentCount":0,"publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/kafka-and-couchbase-up-and-running-in-10-minutes\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","keywords":["connectors","kafka"],"articleSection":["Uncategorized"],"inLanguage":"es","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.couchbase.com\/blog\/kafka-and-couchbase-up-and-running-in-10-minutes\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.couchbase.com\/blog\/kafka-and-couchbase-up-and-running-in-10-minutes\/","url":"https:\/\/www.couchbase.com\/blog\/kafka-and-couchbase-up-and-running-in-10-minutes\/","name":"Up & Running with the Sample Kafka Consumer in 10 Minutes","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/kafka-and-couchbase-up-and-running-in-10-minutes\/#primaryimage"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/kafka-and-couchbase-up-and-running-in-10-minutes\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","datePublished":"2016-01-21T19:13:26+00:00","dateModified":"2020-02-03T12:33:05+00:00","breadcrumb":{"@id":"https:\/\/www.couchbase.com\/blog\/kafka-and-couchbase-up-and-running-in-10-minutes\/#breadcrumb"},"inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.couchbase.com\/blog\/kafka-and-couchbase-up-and-running-in-10-minutes\/"]}]},{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/www.couchbase.com\/blog\/kafka-and-couchbase-up-and-running-in-10-minutes\/#primaryimage","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","width":1800,"height":630},{"@type":"BreadcrumbList","@id":"https:\/\/www.couchbase.com\/blog\/kafka-and-couchbase-up-and-running-in-10-minutes\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.couchbase.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Kafka and Couchbase: Up and Running with the Sample Kafka Consumer in 10 Minutes"}]},{"@type":"WebSite","@id":"https:\/\/www.couchbase.com\/blog\/#website","url":"https:\/\/www.couchbase.com\/blog\/","name":"El blog de Couchbase","description":"Couchbase, la base de datos 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":"es"},{"@type":"Organization","@id":"https:\/\/www.couchbase.com\/blog\/#organization","name":"El blog de Couchbase","url":"https:\/\/www.couchbase.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"es","@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\/e9181374f225c90084ec3ba86bdcfa2e","name":"Sergey Avseyev, Ingeniero SDK, Couchbase","image":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/796ab283bd56fe3716a102ebe16daff6","url":"https:\/\/secure.gravatar.com\/avatar\/288a892d231cf8c4e57ed0643e4681b4654a141361f6ec3c5b79ccd4d885e038?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/288a892d231cf8c4e57ed0643e4681b4654a141361f6ec3c5b79ccd4d885e038?s=96&d=mm&r=g","caption":"Sergey Avseyev, SDK Engineer, Couchbase"},"description":"Sergey Avseyev es Ingeniero SDK en Couchbase. Sergey Avseyev es responsable del desarrollo del conector Kafka, y la biblioteca subyacente, que implementa DCP, el protocolo de replicaci\u00f3n de Couchbase. Tambi\u00e9n mantiene PHP SDK para Couchbase.","sameAs":["https:\/\/x.com\/avsej"],"url":"https:\/\/www.couchbase.com\/blog\/es\/author\/sergey-avseyev\/"}]}},"authors":[{"term_id":8995,"user_id":25,"is_guest":0,"slug":"sergey-avseyev","display_name":"Sergey Avseyev, SDK Engineer, Couchbase","avatar_url":"https:\/\/secure.gravatar.com\/avatar\/288a892d231cf8c4e57ed0643e4681b4654a141361f6ec3c5b79ccd4d885e038?s=96&d=mm&r=g","author_category":"","last_name":"Avseyev, SDK Engineer, Couchbase","first_name":"Sergey","job_title":"","user_url":"","description":"Sergey Avseyev es Ingeniero SDK en Couchbase. Sergey Avseyev es responsable del desarrollo del conector Kafka, y la biblioteca subyacente, que implementa DCP, el protocolo de replicaci\u00f3n de Couchbase. Tambi\u00e9n mantiene PHP SDK para Couchbase."}],"_links":{"self":[{"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/posts\/2010","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/users\/25"}],"replies":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/comments?post=2010"}],"version-history":[{"count":0,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/posts\/2010\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/media\/13873"}],"wp:attachment":[{"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/media?parent=2010"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/categories?post=2010"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/tags?post=2010"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/ppma_author?post=2010"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}