Dando continuidade ao nosso projeto, vamos agora começar a trabalhar com o Apache Kafka utilizando o serviço MSK da Amazon
2 – Criando um cluster Kafka
De volta ao AWS, no canto superior esquerdo, clique em services novamente e procure por MSK
Dentro do MSK, clique em create cluster.
De um nome ao seu cluster, selecione a VPC que você criou e a versão do kafka
Em Availability Zones, selecione as subnets criadas para os brokers:
Em Brokers per Availability Zone e informe 1 em ambos.
Em Encryption, desmarque a caixa Enable encryption within the cluster e selecione Only plaintext traffic allowed
Finalmente, clique em create cluster. O Status Active indica que o cluster está pronto
Conectando ao cluster Kafka, criando tópicos, consumidores e produtores
Com tudo configurado, chegou a hora de instalar o kafka (anteriormente criamos um cluster aonde iremos nos conectar)
Vá ao seu console EC2 e digite os seguinte comandos:
1 2 3 | sudo yum install java-1.8.0 wget https://archive.apache.org/dist/kafka/2.1.0/kafka_2.12-2.1.0.tgz tar -xzf kafka_2.12-2.1.0.tgz |
Os comandos instalarão o Java, fará o download e descompactará o kafka
Agora, vamos criar um tópico no kafka. Para isso, você precisará de algumas informações que estão na página do MSK.
Clique no nome do seu cluster e vá em view client information. Esta página terá todas as informações que você precisará para configurar o Kafka.
Entre na sua pasta do kafka no seu servidor EC2 e digite estes comandos, substituindo o texto ZookeeperConnectString pelo texto em Zookeeper connect dentro de aspas duplas.
Exemplo: “172.31.5.167:2181,172.31.21.226:2181,172.31.40.50:2181”
1 2 | cd kafka_2.12-2.1.0/ bin/kafka-topics.sh --create --zookeeper ZookeeperConnectString --replication-factor 3 --partitions 1 --topic NobelTopic |
Caso ocorra este erro, será necessário alterar a configuração do security group do seu cluster MSK (kafka).
Vá em MSK novamente, clique no nome do cluster. Clique no link do security group vinculado ao cluster.
Inclua na aba Inbound os valores destacados. Como é um tutorial de aprendizado, vamos deixar os acesso full.
Volte ao seu terminal EC2 e executa novamente o comando. Se tudo der certo, você verá algo parecido com isto:
Producer
Criaremos nosso producer para que os dados contidos nele possam ser consumidos pelo consumer
Crie uma pasta fora de sua pasta Kafka chamada tmp. Copiaremos o JVM truststore para conectar ao cluster Kafka (sua jvm poderá estar em um path diferente)
1 2 3 | cd .. mkdir tmp cp /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.201.b09-0.amzn2.x86_64/jre/lib/security/cacerts /tmp/kafka.client.truststore.jks |
Vamos voltar agora à pasta bin do kafka para criarmos o arquivo de configuração client.properties com a seguinte configuração:
security.protocol=PLAINTEXT
ssl.truststore.location=/tmp/kafka.client.truststore.jks
1 2 | cd kafka_2.12-2.1.0/bin/ vi client.properties |
Aperta a tecla “i” para editar o arquivo recém criado, cole a configuração, aperte a tecla ESC, aperte dois pontos (:), digite X e de ENTER
Digite o comando abaixo, substituindo o valor BootstrapBrokerString pelo valor encontrado no seu AWS MSK
./kafka-console-producer.sh –broker-list BootstrapBrokerString –producer.config client.properties –topic NobelTopic
No meu caso ficaria:
1 | ./kafka-console-producer.sh --broker-list "b-3.kafkacluster.qlmvq3.c2.kafka.us-east-2.amazonaws.com:9092,b-2.kafkacluster.qlmvq3.c2.kafka.us-east-2.amazonaws.com:9092,b-1.kafkacluster.qlmvq3.c2.kafka.us-east-2.amazonaws.com:9092" --producer.config client.properties --topic NobelTopic |
Se tudo der certo, você terá uma tela como essa:
tudo que for digitado e apertado ENTER, estará disponível para o Consumer
Criando o Consumer
Com tudo feito, basta agora criarmos um consumidor
Mantenha sua sessao EC2 aberta e abra uma nova (você pode simplesmente duplicar sua sessão com o putty:
Na nova sessão, acessa sua pasta kafka/bin e execute o seguinte comando:
bin/kafka-console-consumer.sh –bootstrap-server BootstrapBrokerString –consumer.config client.properties –topic AWSKafkaTutorialTopic –from-beginning
Similar ao Producer, substitua o texto BootstrapBrokerString pelo sua string Bootstrap servers:
1 | ./kafka-console-consumer.sh --bootstrap-server "b-3.kafkacluster.qlmvq3.c2.kafka.us-east-2.amazonaws.com:9092,b-2.kafkacluster.qlmvq3.c2.kafka.us-east-2.amazonaws.com:9092,b-1.kafkacluster.qlmvq3.c2.kafka.us-east-2.amazonaws.com:9092" --consumer.config client.properties --topic NobelTopic --from-beginning |
A partir de agora, todos os dados que forem criados no producer, serão consumidos no seu consumer!