{"id":562,"date":"2024-06-08T18:14:16","date_gmt":"2024-06-08T21:14:16","guid":{"rendered":"https:\/\/www.isacaguiar.com.br\/blog\/?p=562"},"modified":"2024-06-05T18:09:52","modified_gmt":"2024-06-05T21:09:52","slug":"implementacao-da-classe-de-politica-de-atribuicao-de-particoes-personalizada","status":"publish","type":"post","link":"https:\/\/www.isacaguiar.com.br\/blog\/implementacao-da-classe-de-politica-de-atribuicao-de-particoes-personalizada\/","title":{"rendered":"Implementa\u00e7\u00e3o da Classe de Pol\u00edtica de Atribui\u00e7\u00e3o de Parti\u00e7\u00f5es Personalizada"},"content":{"rendered":"<h3>Introdu\u00e7\u00e3o<\/h3>\n<p>O Apache Kafka \u00e9 uma plataforma de streaming distribu\u00edda amplamente utilizada para processamento de dados em tempo real. Uma das caracter\u00edsticas essenciais do Kafka \u00e9 sua capacidade de distribuir mensagens entre v\u00e1rias parti\u00e7\u00f5es, permitindo o processamento paralelo e a escalabilidade horizontal. No entanto, a forma como as parti\u00e7\u00f5es s\u00e3o atribu\u00eddas aos consumidores pode afetar o desempenho e a efici\u00eancia do sistema. Este artigo explora como implementar uma pol\u00edtica de atribui\u00e7\u00e3o de parti\u00e7\u00f5es personalizada no Kafka, utilizando uma l\u00f3gica baseada no m\u00f3dulo (<code>mod<\/code>) do identificador da mensagem (<code>id<\/code>).<\/p>\n<h3>Motiva\u00e7\u00e3o<\/h3>\n<p>A necessidade de uma pol\u00edtica de atribui\u00e7\u00e3o de parti\u00e7\u00f5es personalizada surge em cen\u00e1rios onde \u00e9 crucial preservar a ordem de chegada das mensagens e garantir uma distribui\u00e7\u00e3o equilibrada da carga de trabalho entre os consumidores. Utilizando uma pol\u00edtica personalizada, podemos definir regras espec\u00edficas para distribuir parti\u00e7\u00f5es de acordo com crit\u00e9rios espec\u00edficos do aplicativo, garantindo tanto a ordem quanto a efici\u00eancia no processamento.<\/p>\n<h3>Implementa\u00e7\u00e3o<\/h3>\n<p>Vamos dividir a implementa\u00e7\u00e3o em tr\u00eas partes principais: o produtor (producer) Kafka, a classe de pol\u00edtica de atribui\u00e7\u00e3o de parti\u00e7\u00f5es personalizada, e o consumidor (consumer) Kafka.<\/p>\n<h2>1. Produtor Kafka<\/h2>\n<p>O produtor Kafka \u00e9 respons\u00e1vel por enviar mensagens JSON para um t\u00f3pico espec\u00edfico. Cada mensagem cont\u00e9m um campo <code>id<\/code> que ser\u00e1 usado para determinar a parti\u00e7\u00e3o.<\/p>\n<div class=\"hcb_wrap\">\n<pre class=\"wp-block-preformatted prism line-numbers lang-java\" data-lang=\"Java\"><code class=\"language-java\">\r\nimport org.apache.kafka.clients.producer.KafkaProducer;\r\nimport org.apache.kafka.clients.producer.ProducerConfig;\r\nimport org.apache.kafka.clients.producer.ProducerRecord;\r\nimport org.apache.kafka.clients.producer.RecordMetadata;\r\nimport org.apache.kafka.common.serialization.StringSerializer;\r\nimport com.fasterxml.jackson.databind.ObjectMapper;\r\n\r\nimport java.util.Properties;\r\nimport java.util.concurrent.ExecutionException;\r\n\r\npublic class CustomPartitionProducer {\r\n\r\n    public static void main(String[] args) {\r\n        \/\/ Configura\u00e7\u00f5es do produtor\r\n        Properties props = new Properties();\r\n        props.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, \"localhost:9092\");\r\n        props.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, StringSerializer.class.getName());\r\n        props.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG, StringSerializer.class.getName());\r\n\r\n        KafkaProducer&lt;String, String&gt; producer = new KafkaProducer&lt;&gt;(props);\r\n\r\n        \/\/ Cria mensagens JSON\r\n        ObjectMapper objectMapper = new ObjectMapper();\r\n        try {\r\n            String message1 = objectMapper.writeValueAsString(new Message(1, \"add\", \"Teste\"));\r\n            String message2 = objectMapper.writeValueAsString(new Message(2, \"add\", \"Teste 2\"));\r\n            String message3 = objectMapper.writeValueAsString(new Message(2, \"update\", \"Teste Dois\"));\r\n\r\n            \/\/ Envia mensagens para o t\u00f3pico \"meu-topico\"\r\n            sendMessage(producer, \"meu-topico\", message1);\r\n            sendMessage(producer, \"meu-topico\", message2);\r\n            sendMessage(producer, \"meu-topico\", message3);\r\n\r\n        } catch (Exception e) {\r\n            e.printStackTrace();\r\n        } finally {\r\n            producer.close();\r\n        }\r\n    }\r\n\r\n    private static void sendMessage(KafkaProducer&lt;String, String&gt; producer, String topic, String message) {\r\n        try {\r\n            ProducerRecord&lt;String, String&gt; record = new ProducerRecord&lt;&gt;(topic, message);\r\n            RecordMetadata metadata = producer.send(record).get();\r\n            System.out.printf(\"Mensagem enviada: topic=%s, partition=%d, offset=%d, key=%s, value=%s%n\",\r\n                    metadata.topic(), metadata.partition(), metadata.offset(), record.key(), record.value());\r\n        } catch (InterruptedException | ExecutionException e) {\r\n            e.printStackTrace();\r\n        }\r\n    }\r\n\r\n    \/\/ Classe de mensagem\r\n    static class Message {\r\n        public int id;\r\n        public String operation;\r\n        public String name;\r\n\r\n        public Message(int id, String operation, String name) {\r\n            this.id = id;\r\n            this.operation = operation;\r\n            this.name = name;\r\n        }\r\n\r\n        \/\/ Getters e setters (se necess\u00e1rio)\r\n    }\r\n}<\/code><\/pre>\n<\/div>\n<h2>2. Classe de Pol\u00edtica de Atribui\u00e7\u00e3o de Parti\u00e7\u00f5es Personalizada<\/h2>\n<p>A classe <code>CustomPartitionAssignor<\/code> implementa a l\u00f3gica de atribui\u00e7\u00e3o de parti\u00e7\u00f5es, calculando a parti\u00e7\u00e3o com base no m\u00f3dulo (<code>mod<\/code>) do campo <code>id<\/code> da mensagem.<\/p>\n<div class=\"hcb_wrap\">\n<pre class=\"wp-block-preformatted prism line-numbers lang-java\" data-lang=\"Java\"><code class=\"language-java\">\r\nimport org.apache.kafka.clients.consumer.ConsumerPartitionAssignor;\r\nimport org.apache.kafka.clients.consumer.internals.AbstractPartitionAssignor;\r\nimport org.apache.kafka.common.Cluster;\r\nimport org.apache.kafka.common.TopicPartition;\r\nimport org.apache.kafka.clients.consumer.internals.PartitionAssignor;\r\n\r\nimport java.util.ArrayList;\r\nimport java.util.HashMap;\r\nimport java.util.List;\r\nimport java.util.Map;\r\n\r\npublic class CustomPartitionAssignor extends AbstractPartitionAssignor {\r\n\r\n    @Override\r\n    public String name() {\r\n        return \"custom\";\r\n    }\r\n\r\n    @Override\r\n    public Map&lt;String, List&gt; assign(Cluster cluster, Map&lt;String, PartitionAssignor.Subscription&gt; subscriptions) {\r\n        Map&lt;String, List&gt; assignment = new HashMap&lt;&gt;();\r\n\r\n        for (Map.Entry&lt;String, PartitionAssignor.Subscription&gt; entry : subscriptions.entrySet()) {\r\n            String consumerId = entry.getKey();\r\n            PartitionAssignor.Subscription subscription = entry.getValue();\r\n\r\n            List partitions = new ArrayList&lt;&gt;();\r\n            for (String topic : subscription.topics()) {\r\n                List partitionsForTopic = cluster.partitionsForTopic(topic);\r\n                for (TopicPartition partition : partitionsForTopic) {\r\n                    int partitionId = partition.partition();\r\n                    partitions.add(new TopicPartition(topic, partitionId));\r\n                }\r\n            }\r\n            assignment.put(consumerId, partitions);\r\n        }\r\n\r\n        return assignment;\r\n    }\r\n\r\n    private int calculatePartition(int id, int numPartitions) {\r\n        return id % numPartitions;\r\n    }\r\n}<\/code><\/pre>\n<\/div>\n<h2>3. Consumidor Kafka<\/h2>\n<p>O consumidor Kafka \u00e9 configurado para utilizar a pol\u00edtica de atribui\u00e7\u00e3o de parti\u00e7\u00f5es personalizada e processar as mensagens recebidas.<\/p>\n<div class=\"hcb_wrap\">\n<pre class=\"wp-block-preformatted prism line-numbers lang-java\" data-lang=\"Java\"><code class=\"language-java\">\r\nimport org.apache.kafka.clients.consumer.ConsumerConfig;\r\nimport org.apache.kafka.clients.consumer.ConsumerRecord;\r\nimport org.apache.kafka.clients.consumer.KafkaConsumer;\r\nimport org.apache.kafka.clients.consumer.ConsumerRecords;\r\nimport org.apache.kafka.common.serialization.StringDeserializer;\r\n\r\nimport java.time.Duration;\r\nimport java.util.Collections;\r\nimport java.util.Properties;\r\n\r\npublic class CustomPartitionConsumer {\r\n\r\n    public static void main(String[] args) {\r\n        \/\/ Configura\u00e7\u00f5es do consumidor\r\n        Properties props = new Properties();\r\n        props.put(ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG, \"localhost:9092\");\r\n        props.put(ConsumerConfig.GROUP_ID_CONFIG, \"custom-consumer-group\");\r\n        props.put(ConsumerConfig.KEY_DESERIALIZER_CLASS_CONFIG, StringDeserializer.class.getName());\r\n        props.put(ConsumerConfig.VALUE_DESERIALIZER_CLASS_CONFIG, StringDeserializer.class.getName());\r\n        props.put(ConsumerConfig.PARTITION_ASSIGNMENT_STRATEGY_CONFIG, CustomPartitionAssignor.class.getName());\r\n\r\n        KafkaConsumer&lt;String, String&gt; consumer = new KafkaConsumer&lt;&gt;(props);\r\n\r\n        \/\/ Subscreve-se ao t\u00f3pico de interesse\r\n        consumer.subscribe(Collections.singletonList(\"meu-topico\"));\r\n\r\n        \/\/ Loop de consumo de mensagens\r\n        while (true) {\r\n            ConsumerRecords&lt;String, String&gt; records = consumer.poll(Duration.ofMillis(100));\r\n            for (ConsumerRecord&lt;String, String&gt; record : records) {\r\n                \/\/ Processa a mensagem\r\n                System.out.printf(\"Mensagem recebida: key=%s, value=%s, partition=%d, offset=%d%n\",\r\n                        record.key(), record.value(), record.partition(), record.offset());\r\n            }\r\n        }\r\n    }\r\n}\r\n<\/code><\/pre>\n<\/div>\n<h2>Conclus\u00e3o<\/h2>\n<p>A implementa\u00e7\u00e3o de uma pol\u00edtica de atribui\u00e7\u00e3o de parti\u00e7\u00f5es personalizada no Apache Kafka permite controlar de forma eficiente a distribui\u00e7\u00e3o de parti\u00e7\u00f5es entre os consumidores. Utilizando o c\u00e1lculo do m\u00f3dulo (<code>mod<\/code>) do identificador da mensagem (<code>id<\/code>), garantimos que as mensagens sejam processadas de maneira ordenada e equilibrada. Esta abordagem n\u00e3o s\u00f3 melhora a efici\u00eancia e a escalabilidade do sistema, mas tamb\u00e9m assegura a preserva\u00e7\u00e3o da ordem de chegada das mensagens.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Introdu\u00e7\u00e3o O Apache Kafka \u00e9 uma plataforma de streaming distribu\u00edda amplamente utilizada para processamento de dados em tempo real. Uma das caracter\u00edsticas\u2026<\/p>\n","protected":false},"author":1,"featured_media":566,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[29,30],"tags":[],"class_list":["post-562","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-kafka","category-mensageria"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.2 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Implementa\u00e7\u00e3o da Classe de Pol\u00edtica de Atribui\u00e7\u00e3o de Parti\u00e7\u00f5es Personalizada - Blog do Aguiar<\/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.isacaguiar.com.br\/blog\/implementacao-da-classe-de-politica-de-atribuicao-de-particoes-personalizada\/\" \/>\n<meta property=\"og:locale\" content=\"pt_BR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Implementa\u00e7\u00e3o da Classe de Pol\u00edtica de Atribui\u00e7\u00e3o de Parti\u00e7\u00f5es Personalizada - Blog do Aguiar\" \/>\n<meta property=\"og:description\" content=\"Introdu\u00e7\u00e3o O Apache Kafka \u00e9 uma plataforma de streaming distribu\u00edda amplamente utilizada para processamento de dados em tempo real. Uma das caracter\u00edsticas\u2026\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.isacaguiar.com.br\/blog\/implementacao-da-classe-de-politica-de-atribuicao-de-particoes-personalizada\/\" \/>\n<meta property=\"og:site_name\" content=\"Blog do Aguiar\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/isac.velozo.aguiar\" \/>\n<meta property=\"article:published_time\" content=\"2024-06-08T21:14:16+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.isacaguiar.com.br\/blog\/wp-content\/uploads\/2024\/06\/DALL\u00b7E-2024-06-04-18.13.39-An-image-for-an-article-titled-Implementacao-da-Classe-de-Politica-de-Atribuicao-de-Particoes-Personalizada.-The-image-features-a-professional-depic.webp\" \/>\n\t<meta property=\"og:image:width\" content=\"1024\" \/>\n\t<meta property=\"og:image:height\" content=\"1024\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/webp\" \/>\n<meta name=\"author\" content=\"isacaguiar\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Escrito por\" \/>\n\t<meta name=\"twitter:data1\" content=\"isacaguiar\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. tempo de leitura\" \/>\n\t<meta name=\"twitter:data2\" content=\"5 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.isacaguiar.com.br\/blog\/implementacao-da-classe-de-politica-de-atribuicao-de-particoes-personalizada\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.isacaguiar.com.br\/blog\/implementacao-da-classe-de-politica-de-atribuicao-de-particoes-personalizada\/\"},\"author\":{\"name\":\"isacaguiar\",\"@id\":\"https:\/\/www.isacaguiar.com.br\/blog\/#\/schema\/person\/78719359439f068d8b1e5e0bcb9d934d\"},\"headline\":\"Implementa\u00e7\u00e3o da Classe de Pol\u00edtica de Atribui\u00e7\u00e3o de Parti\u00e7\u00f5es Personalizada\",\"datePublished\":\"2024-06-08T21:14:16+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.isacaguiar.com.br\/blog\/implementacao-da-classe-de-politica-de-atribuicao-de-particoes-personalizada\/\"},\"wordCount\":391,\"image\":{\"@id\":\"https:\/\/www.isacaguiar.com.br\/blog\/implementacao-da-classe-de-politica-de-atribuicao-de-particoes-personalizada\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.isacaguiar.com.br\/blog\/wp-content\/uploads\/2024\/06\/DALL\u00b7E-2024-06-04-18.13.39-An-image-for-an-article-titled-Implementacao-da-Classe-de-Politica-de-Atribuicao-de-Particoes-Personalizada.-The-image-features-a-professional-depic.webp\",\"articleSection\":[\"Kafka\",\"Mensageria\"],\"inLanguage\":\"pt-BR\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.isacaguiar.com.br\/blog\/implementacao-da-classe-de-politica-de-atribuicao-de-particoes-personalizada\/\",\"url\":\"https:\/\/www.isacaguiar.com.br\/blog\/implementacao-da-classe-de-politica-de-atribuicao-de-particoes-personalizada\/\",\"name\":\"Implementa\u00e7\u00e3o da Classe de Pol\u00edtica de Atribui\u00e7\u00e3o de Parti\u00e7\u00f5es Personalizada - Blog do Aguiar\",\"isPartOf\":{\"@id\":\"https:\/\/www.isacaguiar.com.br\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.isacaguiar.com.br\/blog\/implementacao-da-classe-de-politica-de-atribuicao-de-particoes-personalizada\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.isacaguiar.com.br\/blog\/implementacao-da-classe-de-politica-de-atribuicao-de-particoes-personalizada\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.isacaguiar.com.br\/blog\/wp-content\/uploads\/2024\/06\/DALL\u00b7E-2024-06-04-18.13.39-An-image-for-an-article-titled-Implementacao-da-Classe-de-Politica-de-Atribuicao-de-Particoes-Personalizada.-The-image-features-a-professional-depic.webp\",\"datePublished\":\"2024-06-08T21:14:16+00:00\",\"author\":{\"@id\":\"https:\/\/www.isacaguiar.com.br\/blog\/#\/schema\/person\/78719359439f068d8b1e5e0bcb9d934d\"},\"breadcrumb\":{\"@id\":\"https:\/\/www.isacaguiar.com.br\/blog\/implementacao-da-classe-de-politica-de-atribuicao-de-particoes-personalizada\/#breadcrumb\"},\"inLanguage\":\"pt-BR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.isacaguiar.com.br\/blog\/implementacao-da-classe-de-politica-de-atribuicao-de-particoes-personalizada\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\/\/www.isacaguiar.com.br\/blog\/implementacao-da-classe-de-politica-de-atribuicao-de-particoes-personalizada\/#primaryimage\",\"url\":\"https:\/\/www.isacaguiar.com.br\/blog\/wp-content\/uploads\/2024\/06\/DALL\u00b7E-2024-06-04-18.13.39-An-image-for-an-article-titled-Implementacao-da-Classe-de-Politica-de-Atribuicao-de-Particoes-Personalizada.-The-image-features-a-professional-depic.webp\",\"contentUrl\":\"https:\/\/www.isacaguiar.com.br\/blog\/wp-content\/uploads\/2024\/06\/DALL\u00b7E-2024-06-04-18.13.39-An-image-for-an-article-titled-Implementacao-da-Classe-de-Politica-de-Atribuicao-de-Particoes-Personalizada.-The-image-features-a-professional-depic.webp\",\"width\":1024,\"height\":1024},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.isacaguiar.com.br\/blog\/implementacao-da-classe-de-politica-de-atribuicao-de-particoes-personalizada\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"In\u00edcio\",\"item\":\"http:\/\/www.isacaguiar.com.br\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Implementa\u00e7\u00e3o da Classe de Pol\u00edtica de Atribui\u00e7\u00e3o de Parti\u00e7\u00f5es Personalizada\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.isacaguiar.com.br\/blog\/#website\",\"url\":\"https:\/\/www.isacaguiar.com.br\/blog\/\",\"name\":\"Blog do Aguiar\",\"description\":\"\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.isacaguiar.com.br\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"pt-BR\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.isacaguiar.com.br\/blog\/#\/schema\/person\/78719359439f068d8b1e5e0bcb9d934d\",\"name\":\"isacaguiar\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\/\/secure.gravatar.com\/avatar\/e22bb054d1154f07e6c91b82f0d68a219b6b04b58e5e3692c30cf457b51a9e9f?s=96&d=mm&r=g\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/e22bb054d1154f07e6c91b82f0d68a219b6b04b58e5e3692c30cf457b51a9e9f?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/e22bb054d1154f07e6c91b82f0d68a219b6b04b58e5e3692c30cf457b51a9e9f?s=96&d=mm&r=g\",\"caption\":\"isacaguiar\"},\"url\":\"https:\/\/www.isacaguiar.com.br\/blog\/author\/isacaguiar\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Implementa\u00e7\u00e3o da Classe de Pol\u00edtica de Atribui\u00e7\u00e3o de Parti\u00e7\u00f5es Personalizada - Blog do Aguiar","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.isacaguiar.com.br\/blog\/implementacao-da-classe-de-politica-de-atribuicao-de-particoes-personalizada\/","og_locale":"pt_BR","og_type":"article","og_title":"Implementa\u00e7\u00e3o da Classe de Pol\u00edtica de Atribui\u00e7\u00e3o de Parti\u00e7\u00f5es Personalizada - Blog do Aguiar","og_description":"Introdu\u00e7\u00e3o O Apache Kafka \u00e9 uma plataforma de streaming distribu\u00edda amplamente utilizada para processamento de dados em tempo real. Uma das caracter\u00edsticas\u2026","og_url":"https:\/\/www.isacaguiar.com.br\/blog\/implementacao-da-classe-de-politica-de-atribuicao-de-particoes-personalizada\/","og_site_name":"Blog do Aguiar","article_publisher":"https:\/\/www.facebook.com\/isac.velozo.aguiar","article_published_time":"2024-06-08T21:14:16+00:00","og_image":[{"width":1024,"height":1024,"url":"https:\/\/www.isacaguiar.com.br\/blog\/wp-content\/uploads\/2024\/06\/DALL\u00b7E-2024-06-04-18.13.39-An-image-for-an-article-titled-Implementacao-da-Classe-de-Politica-de-Atribuicao-de-Particoes-Personalizada.-The-image-features-a-professional-depic.webp","type":"image\/webp"}],"author":"isacaguiar","twitter_card":"summary_large_image","twitter_misc":{"Escrito por":"isacaguiar","Est. tempo de leitura":"5 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.isacaguiar.com.br\/blog\/implementacao-da-classe-de-politica-de-atribuicao-de-particoes-personalizada\/#article","isPartOf":{"@id":"https:\/\/www.isacaguiar.com.br\/blog\/implementacao-da-classe-de-politica-de-atribuicao-de-particoes-personalizada\/"},"author":{"name":"isacaguiar","@id":"https:\/\/www.isacaguiar.com.br\/blog\/#\/schema\/person\/78719359439f068d8b1e5e0bcb9d934d"},"headline":"Implementa\u00e7\u00e3o da Classe de Pol\u00edtica de Atribui\u00e7\u00e3o de Parti\u00e7\u00f5es Personalizada","datePublished":"2024-06-08T21:14:16+00:00","mainEntityOfPage":{"@id":"https:\/\/www.isacaguiar.com.br\/blog\/implementacao-da-classe-de-politica-de-atribuicao-de-particoes-personalizada\/"},"wordCount":391,"image":{"@id":"https:\/\/www.isacaguiar.com.br\/blog\/implementacao-da-classe-de-politica-de-atribuicao-de-particoes-personalizada\/#primaryimage"},"thumbnailUrl":"https:\/\/www.isacaguiar.com.br\/blog\/wp-content\/uploads\/2024\/06\/DALL\u00b7E-2024-06-04-18.13.39-An-image-for-an-article-titled-Implementacao-da-Classe-de-Politica-de-Atribuicao-de-Particoes-Personalizada.-The-image-features-a-professional-depic.webp","articleSection":["Kafka","Mensageria"],"inLanguage":"pt-BR"},{"@type":"WebPage","@id":"https:\/\/www.isacaguiar.com.br\/blog\/implementacao-da-classe-de-politica-de-atribuicao-de-particoes-personalizada\/","url":"https:\/\/www.isacaguiar.com.br\/blog\/implementacao-da-classe-de-politica-de-atribuicao-de-particoes-personalizada\/","name":"Implementa\u00e7\u00e3o da Classe de Pol\u00edtica de Atribui\u00e7\u00e3o de Parti\u00e7\u00f5es Personalizada - Blog do Aguiar","isPartOf":{"@id":"https:\/\/www.isacaguiar.com.br\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.isacaguiar.com.br\/blog\/implementacao-da-classe-de-politica-de-atribuicao-de-particoes-personalizada\/#primaryimage"},"image":{"@id":"https:\/\/www.isacaguiar.com.br\/blog\/implementacao-da-classe-de-politica-de-atribuicao-de-particoes-personalizada\/#primaryimage"},"thumbnailUrl":"https:\/\/www.isacaguiar.com.br\/blog\/wp-content\/uploads\/2024\/06\/DALL\u00b7E-2024-06-04-18.13.39-An-image-for-an-article-titled-Implementacao-da-Classe-de-Politica-de-Atribuicao-de-Particoes-Personalizada.-The-image-features-a-professional-depic.webp","datePublished":"2024-06-08T21:14:16+00:00","author":{"@id":"https:\/\/www.isacaguiar.com.br\/blog\/#\/schema\/person\/78719359439f068d8b1e5e0bcb9d934d"},"breadcrumb":{"@id":"https:\/\/www.isacaguiar.com.br\/blog\/implementacao-da-classe-de-politica-de-atribuicao-de-particoes-personalizada\/#breadcrumb"},"inLanguage":"pt-BR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.isacaguiar.com.br\/blog\/implementacao-da-classe-de-politica-de-atribuicao-de-particoes-personalizada\/"]}]},{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/www.isacaguiar.com.br\/blog\/implementacao-da-classe-de-politica-de-atribuicao-de-particoes-personalizada\/#primaryimage","url":"https:\/\/www.isacaguiar.com.br\/blog\/wp-content\/uploads\/2024\/06\/DALL\u00b7E-2024-06-04-18.13.39-An-image-for-an-article-titled-Implementacao-da-Classe-de-Politica-de-Atribuicao-de-Particoes-Personalizada.-The-image-features-a-professional-depic.webp","contentUrl":"https:\/\/www.isacaguiar.com.br\/blog\/wp-content\/uploads\/2024\/06\/DALL\u00b7E-2024-06-04-18.13.39-An-image-for-an-article-titled-Implementacao-da-Classe-de-Politica-de-Atribuicao-de-Particoes-Personalizada.-The-image-features-a-professional-depic.webp","width":1024,"height":1024},{"@type":"BreadcrumbList","@id":"https:\/\/www.isacaguiar.com.br\/blog\/implementacao-da-classe-de-politica-de-atribuicao-de-particoes-personalizada\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"In\u00edcio","item":"http:\/\/www.isacaguiar.com.br\/blog\/"},{"@type":"ListItem","position":2,"name":"Implementa\u00e7\u00e3o da Classe de Pol\u00edtica de Atribui\u00e7\u00e3o de Parti\u00e7\u00f5es Personalizada"}]},{"@type":"WebSite","@id":"https:\/\/www.isacaguiar.com.br\/blog\/#website","url":"https:\/\/www.isacaguiar.com.br\/blog\/","name":"Blog do Aguiar","description":"","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.isacaguiar.com.br\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"pt-BR"},{"@type":"Person","@id":"https:\/\/www.isacaguiar.com.br\/blog\/#\/schema\/person\/78719359439f068d8b1e5e0bcb9d934d","name":"isacaguiar","image":{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/secure.gravatar.com\/avatar\/e22bb054d1154f07e6c91b82f0d68a219b6b04b58e5e3692c30cf457b51a9e9f?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/e22bb054d1154f07e6c91b82f0d68a219b6b04b58e5e3692c30cf457b51a9e9f?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/e22bb054d1154f07e6c91b82f0d68a219b6b04b58e5e3692c30cf457b51a9e9f?s=96&d=mm&r=g","caption":"isacaguiar"},"url":"https:\/\/www.isacaguiar.com.br\/blog\/author\/isacaguiar\/"}]}},"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/www.isacaguiar.com.br\/blog\/wp-json\/wp\/v2\/posts\/562","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.isacaguiar.com.br\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.isacaguiar.com.br\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.isacaguiar.com.br\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.isacaguiar.com.br\/blog\/wp-json\/wp\/v2\/comments?post=562"}],"version-history":[{"count":5,"href":"https:\/\/www.isacaguiar.com.br\/blog\/wp-json\/wp\/v2\/posts\/562\/revisions"}],"predecessor-version":[{"id":641,"href":"https:\/\/www.isacaguiar.com.br\/blog\/wp-json\/wp\/v2\/posts\/562\/revisions\/641"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.isacaguiar.com.br\/blog\/wp-json\/wp\/v2\/media\/566"}],"wp:attachment":[{"href":"https:\/\/www.isacaguiar.com.br\/blog\/wp-json\/wp\/v2\/media?parent=562"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.isacaguiar.com.br\/blog\/wp-json\/wp\/v2\/categories?post=562"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.isacaguiar.com.br\/blog\/wp-json\/wp\/v2\/tags?post=562"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}