Plataforma de streaming distribuida (é além de um sistema de fila como o rabbitmq)
É um banco de dados, armazena os dados (não faz os dados 100% em memória)
Você pode configurar o período de exclusão das mensagens no kafka
É super rápido e tem baixa latência
Armazena os dados de forma distribuída entre os seus clusters elencando automaticamente as partições principais em cada cluster
Processa mensagens em tempo real
Tem por padrão o serviço de pub/sub através dos groupsId
Ele não garante a ordem das mensagens (ordem é somente dentro de uma partição, porém em um sistema distribuido, ele recupera todas as mensagens de todas as partições, não garantindo a ordem)
Por padrão você consegue enviar mensagens com o tamanho limite de 1MB, esta mudança pode ser feita no arquivo: server.properties em: message.max.bytes=20971520
nano ~/.bash_profile
# colocar no bash_profile:alias"start_zookeeper= sh ~/kafka_2.13-3.1.0/bin/zookeeper-server-start.sh ~/kafka_2.13-3.1.0/config/zookeeper.properties"alias"start_kafka= sh ~/kafka_2.13-3.1.0/bin/kafka-server-start.sh ~/kafka_2.13-3.1.0/config/server.properties"source~/.bash_profile
Tópicos
Grupo de mensagens armazenadas para que um consumidor possa ler
Zookeeper
Sistema gerenciador das mensagens em partições por tópicos no Kafka
Cluster Kafica
Um conjunto de maquinas distribuindo e dando performance a um kafka com balanciamento
Brokers
Servidores que são utilizados para armazenar/entrega as mensagens
Ele armazena as mensagens em partições diferentes em cada Broker, deixando uma partição em cada Broker diferente
Partitions
Número de filas que armazena as mensagens de um mesmo tópico, as mensagens são distribuidas entre as filas automaticamente pelo Kafka, para fazer essa distribuição ele leva em consideração a key que o producer esta informando quando cria a mensagem. Para distribuir as mensagens para mais de um consomer, temos que ter mais de uma partitions. O número de partitions deve ser definida no arquivo de confinuração, quando o kafka é startado, e também deve estar definida no topico, caso o topico já esteja criado pode ser editado.
# alterar as particoes de um topico
./bin/kafka-topics.sh --alter --bootstrap-server localhost:9092 --partitions 3 --topic PRIMEIRO_TOPICO
# mostrar as particoes de um topico
./bin/kafka-topics.sh --describe --bootstrap-server localhost:9092 --topic PRIMEIRO_TOPICO
Replication Factor
Define quantas replicas das partições você irá querer em cada Broker
Se deixarmos somente uma replica, caso perca um dos clusters, todas as mensagens daquele cluster serão perdidas
Quem faz este gerencimento é o Zookeeper
Offset
Posição da mensagem armazenada em uma partição
Producer
Sistema que envia as mensagens
Consumer
Sistema que consome as mensagens
enviando e consumindo mensagem via terminal
# lista topicos~/kafka_2.13-3.1.0/bin/kafka-topics.sh --list --bootstrap-server localhost:9092
# cria um topico~/kafka_2.13-3.1.0/bin/kafka-topics.sh --create --bootstrap-server localhost:9092 --replication-factor 1 --partitions 1 --topic PRIMEIRO_TOPICO
# enviando mensagem~/kafka_2.13-3.1.0/bin/kafka-console-producer.sh --broker-list localhost:9092 --topic PRIMEIRO_TOPICO
# irá abrir um console para você digitar vários valores, exemplo:# > valor# > valor# consumindo mensagems~/kafka_2.13-3.1.0/bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic PRIMEIRO_TOPICO # consome somente as mesagens novas~/kafka_2.13-3.1.0/bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic PRIMEIRO_TOPICO --from-beginning # lê mensagens deste o inicio# deletar mensagem de um tópicoecho'{ "partitions": [ { "topic": "PRIMEIRO_TOPICO", "partition": 0, "offset": 1 } ], "version": 1 }'> delete-records.json
~/kafka_2.13-3.1.0/bin/kafka-delete-records.sh --bootstrap-server=localhost:9092 --offset-json-file delete-records.json
# deletar um topico~/kafka_2.13-3.1.0/bin/kafka-topics.sh --topic EXEMPLO_TOPICO --delete --bootstrap-server localhost:9092
para criar um balanciamento de consumidores alterar o arquivo server.properties
vim ~/kafka_2.13-3.1.0/config/server.properties
# alterar o valor: # num.partitions=3# agora é alterar o tópico~/kafka_2.13-3.1.0/bin/kafka-topics.sh --alter --bootstrap-server localhost:9092 --topic TOPICO_1 --partitions 3
# para verificar as partições de um tópido~/kafka_2.13-3.1.0/bin/kafka-topics.sh --bootstrap-server localhost:9092 --describe
# agora 2 consumidores passam a trabalhar em paralelo# para testar, rodar 2 consumidores:# ./start.sh # terminal 1# ./start.sh # terminal 2