Visão geral do Kafka e sua instalação e implantação

Visão geral

Conhecimento preliminar (entender a fila de mensagens)

Conceito
Fila de mensagens, nome em inglês: Fila de mensagens, geralmente abreviado como MQ. Entendida literalmente, uma fila de mensagens é uma fila usada para armazenar mensagens.

Middleware de enfileiramento de mensagens O middleware de enfileiramento de
mensagens é um software (componente) usado para armazenar mensagens

Por exemplo:
para analisar o comportamento do usuário do site, é necessário registrar o log de acesso do usuário.
Esses trechos de logs podem ser considerados trechos de mensagens e podemos salvá-los na fila de mensagens.
No futuro, alguns aplicativos precisarão processar esses logs e essas mensagens podem ser retiradas para processamento a qualquer momento.

Cenários de aplicação de filas de mensagens

  1. Processamento assíncrono
    Insira a descrição da imagem aqui

No site de comércio eletrônico, quando um novo usuário se cadastra, as informações do usuário precisam ser salvas no banco de dados e, ao mesmo tempo, é necessário enviar ao usuário uma notificação adicional por e-mail de registro e um código de registro SMS.
No entanto, como o envio de e-mails e o envio de mensagens curtas de registro precisam se conectar a um servidor externo, você precisa esperar por um período adicional de tempo. Nesse momento, você pode usar a fila de mensagens para processamento assíncrono para obter uma resposta rápida.

  1. Desacoplamento do sistema
    Insira a descrição da imagem aqui
  2. Pico de tráfego
    Insira a descrição da imagem aqui
  3. O processamento de log (comum no campo de big data)
    Insira a descrição da imagem aqui
    grandes sites de comércio eletrônico (Taobao, Jingdong, Gome, Suning ...), aplicativos (Tik Tok, Meituan, Didi, etc.) precisam analisar o comportamento do usuário e descobrir usuários com base no comportamento de acesso do usuário As preferências e atividades de, você precisa coletar muitas informações de acesso do usuário na página.

Modelo de interação

  1. Solicitar modelo de resposta
  • modelo de resposta de solicitação http
    Insira a descrição da imagem aqui
  • Modelo de resposta de solicitação de banco de dados
    Insira a descrição da imagem aqui
  1. Produtor, modelo de consumidor
    Insira a descrição da imagem aqui

Observação:

  1. Kafka é baseado neste modelo de interação
  2. Então, ao usar o Kafka, você precisa saber quem é o produtor e quem é o consumidor

Dois modelos de filas de mensagens

  1. Modelo ponto a ponto
    Insira a descrição da imagem aqui

O remetente da mensagem produz a mensagem e a envia para a fila de mensagens e, em seguida, o destinatário a retira da fila de mensagens e a consome.
Depois que a mensagem é consumida, não há mais armazenamento na fila de mensagens, portanto, é impossível para o receptor da mensagem consumir a mensagem que já foi consumida.

Recursos:

  • Um para um: Cada mensagem tem apenas um receptor (Consumidor) (ou seja, uma vez consumida, a mensagem não está mais na fila de mensagens)
  • Sem dependência: Não há dependência entre o remetente e o destinatário, após o remetente enviar uma mensagem, esteja o destinatário rodando ou não, não afetará a próxima mensagem enviada pelo remetente;
  • Recebendo feedback: o destinatário precisa responder à fila com sucesso após receber a mensagem com sucesso, para que a fila de mensagens possa excluir a mensagem recebida atualmente;
  1. Modelo de publicação e assinatura

Insira a descrição da imagem aqui
Recursos:

  • Um para muitos: cada mensagem pode ter vários assinantes;
  • Dependente: existe uma dependência de tempo entre o editor e o assinante. Para um assinante de um tópico (Tópico), ele deve criar um assinante antes que possa consumir as mensagens do editor.
  • Inscreva-se com antecedência: para consumir mensagens, os assinantes precisam se inscrever no tópico da função com antecedência e mantê-lo funcionando online;

Visão geral básica do Kafka

Concept
Kafka é um sistema de enfileiramento de mensagens distribuído baseado no modelo de publicação por assinatura com alto rendimento , alto desempenho , alta simultaneidade , alta confiabilidade, etc.

  1. Alta capacidade: o armazenamento em disco distribuído é usado em vez de HDFS
  2. Alto desempenho: ler e gravar dados em tempo real
  • A memória distribuída é usada e o PageCache é usado: o mecanismo de cache de página do sistema operacional
  • Pertence à memória do nível do sistema operacional. Mesmo se o processo do Kafka falhar e o Kafka for reiniciado, os dados ainda estarão na memória.
  1. Alta simultaneidade: leitura e gravação paralelas distribuídas
  2. Alta confiabilidade: arquitetura distribuída mestre-escravo
  3. Alta seguranca:
  • Memória: operação de registro de log
  • Disco: mecanismo de cópia

Cenários de aplicação

  • Na arquitetura em tempo real de big data, ele é usado para armazenamento temporário de dados em tempo real

Insira a descrição da imagem aqui

Na foto acima, podemos ver:

  • Produtores: pode haver muitos aplicativos para colocar dados de mensagens no cluster Kafka.
  • Consumidores: pode haver muitos aplicativos que extraem dados de mensagens do cluster Kafka.
  • Conectores (conectores): os conectores do Kafka podem importar dados do banco de dados para o Kafka e também podem exportar dados do Kafka para
  • Processadores de fluxo: os processadores de fluxo podem extrair dados do Kafka ou gravar dados no Kafka.

Instalação e implantação

  1. Faça upload do pacote de instalação do Kafka para a máquina virtual e descompacte-o
cd /export/soft/
tar -zxvf kafka_2.12-2.4.1.tgz -C ../server/
  1. Modificar server.properties
cd /export/server/kafka_2.12-2.4.1/config
vim server.properties

添加以下内容:
# 指定broker的id
broker.id=0

# 指定Kafka数据的位置
log.dirs=/export/server/kafka_2.12-2.4.1/data

# 配置zk的三个节点
zookeeper.connect=node1:2181,node2:2181,node3:2181
  1. Copie o kafka instalado para os outros dois servidores
cd /export/server
scp -r kafka_2.12-2.4.1/ node2:$PWD
scp -r kafka_2.12-2.4.1/ node3:$PWD

修改另外两个节点的broker.id分别为1和2:
---------node2--------------
cd /export/server/kafka_2.12-2.4.1/config
vim server.properties
broker.id=1

--------node3--------------
cd /export/server/kafka_2.12-2.4.1/config
vim server.properties
broker.id=2

  1. Configurar a variável de ambiente KAFKA_HOME
vi /etc/profile
export KAFKA_HOME=/export/server/kafka_2.12-2.4.1
export PATH=:$PATH:${KAFKA_HOME}

分发到各个节点
scp /etc/profile node2:$PWD
scp /etc/profile node3:$PWD
每个节点加载环境变量
source /etc/profile
  1. Inicie o servidor
# 启动ZooKeeper
/export/server/zookeeper-3.4.6/bin/start-zk-all.sh

# 启动Kafka
cd /export/server/kafka_2.12-2.4.1
nohup bin/kafka-server-start.sh config/server.properties &

# 测试Kafka集群是否启动成功
bin/kafka-topics.sh --bootstrap-server node1:9092 --list

Insira a descrição da imagem aqui
Nenhum erro é relatado, indicando que o cluster Kafka foi iniciado com sucesso

Configure o script de inicialização / desligamento do Kafka com um clique

  1. Insira o diretório do script de execução
cd /export/server/kafka_2.12-2.4.1/bin/
vim slave
  1. Escreva um arquivo de configuração de escravo para salvar kafka em quais nós começar
node1
node2
node3
  1. Escreva o script start-kafka.sh
vim start-kafka.sh

添加以下内容:
cat /export/server/kafka_2.12-2.4.1/bin/slave | while read line
do
{
    
    
 echo $line
 ssh $line "source /etc/profile;export JMX_PORT=9988;nohup ${KAFKA_HOME}/bin/kafka-server-start.sh ${KAFKA_HOME}/config/server.properties >/dev/nul* 2>&1 & "
}&
wait
done
  1. Escreva o script stop-kafka.sh
vim stop-kafka.sh

添加以下内容:
cat /export/server/kafka_2.12-2.4.1/bin/slave | while read line
do
{
    
    
 echo $line
 ssh $line "source /etc/profile;jps |grep Kafka |cut -d' ' -f1 |xargs kill -s 9"
}&
wait
done
  1. Configure as permissões de execução para start-kafka.sh e stop-kafka.sh
chmod u+x start-kafka.sh
chmod u+x stop-kafka.sh
  1. Execute a inicialização e desligamento com uma tecla
./start-kafka.sh
./stop-kafka.sh

Estrutura de diretório do software Kafka

Insira a descrição da imagem aqui

Operação basica

  1. Criar tópico
    Todas as mensagens no Kafka são armazenadas em tópicos. Para produzir mensagens para o Kafka, você deve primeiro ter um determinado tópico.
# 创建名为test的主题
bin/kafka-topics.sh \
--create \
--bootstrap-server node1:9092 \
--topic test

# 查看目前Kafka中的所有主题
bin/kafka-topics.sh \
--list \
--bootstrap-server node1:9092

Ver detalhes do tópico de teste

bin/kafka-topics.sh \
--bootstrap-server node1:9092 \
--describe \
--topic test

Insira a descrição da imagem aqui
A primeira linha: um resumo de todas as partições do tema de teste

PartitionCount: contar o número total de divisórias no tópico A figura mostra que o ensaio tem uma partição..
ReplicationFactor:. Conta o número de cópias de partição no tópico A figura mostra que há uma cópia de uma partição no teste.
Segmento .bytes: Representa o tamanho de um arquivo de segmento

A partir da segunda linha:

Partição: número da partição, 0 representa a primeira partição
Líder: representa a partição atual responsável pela leitura e escrita em qual máquina, 2 representa a terceira máquina (a partir de 0, 2 representa o terceiro broker)
Réplicas: representa a atual Em que as máquinas estão as réplicas de partição, 2 representa a terceira máquina
Isr: o conjunto de nós onde as réplicas foram sincronizadas

Exclua a matéria de teste

bin/kafka-topics.sh \
--delete \
--topic test
  1. Para produzir mensagens para Kafka,
    use o programa de teste integrado de Kafka para produzir algumas mensagens para o tópico de teste de Kafka:
bin/kafka-console-producer.sh \
--broker-list node1:9092 \
--topic test
  1. Consumir mensagens do Kafka
    Copie a janela do shell de node1 e
    use o seguinte comando para consumir mensagens no tópico de teste:
bin/kafka-console-consumer.sh \
--bootstrap-server node1:9092 \
--topic test \
--from-beginning

Enviado:
Insira a descrição da imagem aqui
Recebido:
Insira a descrição da imagem aqui

Acho que você gosta

Origin blog.csdn.net/zh2475855601/article/details/115215310
Recomendado
Clasificación