Compartilhamento de tecnologia | Implantação de cluster Kafka de fila de mensagens

1. Introdução

1. Introdução

Kafka foi originalmente desenvolvido pelo Linkedin. É um sistema de log distribuído, particionado, com várias cópias e vários assinantes, baseado na coordenação do zookeeper (também pode ser usado como um sistema MQ). Pode ser comumente usado para logs da web/nginx , logs de acesso, serviços de mensagens etc., o Linkedin contribuiu para a Apache Foundation em 2010 e se tornou um dos principais projetos de código aberto.

2. Os principais cenários de aplicação são
  • Coleta de logs: você pode usar o Kafka para coletar logs de vários serviços e abri-los para vários consumidores por meio de uma interface unificada.

  • Sistema de mensagens: desacoplar produção e consumidores, mensagens de cache.

  • Rastreamento de atividade do usuário: kafka pode registrar várias atividades de usuários de aplicativos ou aplicativos da web, como navegar na web, clicar e outras atividades, essas atividades podem ser enviadas para kafka e, em seguida, os assinantes podem monitorar assinando essas mensagens.

  • Indicadores operacionais: podem ser usados ​​para monitorar vários dados.

3. Os principais objetivos de design do Kafka são os seguintes:
  • A capacidade de persistência de mensagem é fornecida com uma complexidade de tempo de O(1), e o desempenho de acesso em tempo constante pode ser garantido mesmo para dados acima do nível de TB.
  • Alto rendimento. Mesmo em máquinas comerciais muito baratas, uma única máquina pode suportar a transmissão de 100 mil mensagens por segundo.
  • Suporta particionamento de mensagens entre servidores Kafka e consumo distribuído, garantindo a transmissão sequencial de mensagens em cada partição.
  • Tanto o processamento de dados off-line quanto o processamento de dados em tempo real são suportados.
  • Expansão: expansão horizontal da linha de suporte
4. Conceitos básicos

Kafka é uma mensagem particionada distribuída que fornece as funções que um sistema de mensagens deve ter.

nome explicar
corretor Nó de processamento de middleware de mensagem, um intermediário é um nó Kafka e vários intermediários formam um cluster Kafka.
tema Kafka classifica de acordo com a mensagem, e cada mensagem publicada no Kafka tem um tópico correspondente
produtor Produtor de mensagem (editor)
consumidor consumidor de mensagem (assinante)
grupo de consumidores Em um cluster de assinatura de mensagem, uma mensagem pode ser consumida por vários grupos de consumidores, mas apenas um consumidor em um grupo de consumidores pode consumir mensagens.

2. Preparação ambiental

当前环境:centos7.9三台
软件版本:kafka_2.13-3.0.0
环境目录:/usr/local/kafka

下载kafka;包含了zookeeper(三台机器都要操作)

[root@localhost opt]# wget https://archive.apache.org/dist/kafka/3.0.0/kafka_2.13-3.0.0.tgz
[root@localhost opt]# tar zxvf kafka_2.13-3.0.0.tgz
[root@localhost opt]# mv kafka_2.13-3.0.0 /usr/local/kafka

配置环境变量(三台机器都要操作)

[root@localhost opt]# vim /etc/profile
## 末尾添加
export ZOOKEEPER_HOME=/usr/local/kafka
export PATH=$PATH:$ZOOKEEPER_HOME/bin

## 加载环境变量
[root@localhost opt]# source /etc/profile

3. Instalação do Zookeeper

Como os metadados, como a localização da partição Kafka e a configuração do tópico, são armazenados no cluster ZooKeeper, o cluster zookeeper deve ser instalado primeiro para criar um ambiente de cluster Kafka

zookeeper配置文件修改(三台配置一样)

[root@localhost ~]# cd /usr/local/kafka/
[root@localhost kafka]# vim config/zookeeper.properties

dataDir=/tmp/zookeeper				## 主要用来配置zookeeper server数据的存放路径
clientPort=2181						## zookeeper服务端口
tickTime=2000						## zookeeper客户端与服务器之间的心跳时间。默认值为2000毫秒,即2秒
initLimit=10						## Follower连接到Leader并同步数据的最大时间
syncLimit=5							## Follower同步Leader的最大时间
maxClientCnxns=0					## 客户端最大连接数,设置0或者不设置表示取消连接数限制
admin.enableServer=false			## 禁用 Admin Server
server.0=192.168.1.13:2888:3888		## 配置zookeeper群集
server.1=192.168.1.108:2888:3888
server.2=192.168.1.143:2888:3888

创建myid文件(三台机器都要操作)

192.168.1.13机器上

[root@localhost kafka]# mkdir -p /opt/zookeeper;echo "0" > /tmp/zookeeper/myid

192.168.1.108机器上

[root@localhost kafka]# mkdir -p /opt/zookeeper;echo "1" > /tmp/zookeeper/myid

192.168.1.143机器上

[root@localhost kafka]# mkdir -p /opt/zookeeper;echo "2" > /tmp/zookeeper/myid

创建system启动文件

[root@localhost kafka]# vim /usr/lib/systemd/system/zookeeper.service

[Unit]
Description=zookeeper
After=network.target
Wants=network.target

[Service]
Type=simple
Environment="PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/app/idk/bin"
User=root
Group=root
ExecStart=/usr/local/kafka/bin/zookeeper-server-start.sh /usr/local/kafka/config/zookeeper.properties
Restart=always

[Install]
WantedBy=multi-user.target

启动zookeeper

[root@localhost kafka]# systemctl enable zookeeper.service
[root@localhost kafka]# systemctl start zookeeper.service

4. Instalação do Kafka

kafka配置文件修改

[root@localhost ~]# cd /usr/local/kafka/
[root@localhost kafka]# vim config/server.properties (copie diretamente para os outros dois)

broker.id=1												## 第一台1,第二台为2 第三台为3
listeners=PLAINTEXT://:9092								## 监听IP地址和端口
advertised.listeners=PLAINTEXT://192.168.1.13:9092		## 配置kafka的broker ip
num.network.threads=3
num.io.threads=8
socket.send.buffer.bytes=102400
socket.receive.buffer.bytes=102400
socket.request.max.bytes=404857600
log.dirs=/tmp/kafka-logs
num.partitions=1
num.recovery.threads.per.data.dir=1
offsets.topic.replication.factor=1
transaction.state.log.replication.factor=1
transaction.state.log.min.isr=1
log.retention.hours=168
log.segment.bytes=1073741824
log.retention.check.interval.ms=300000
zookeeper.connect=192.168.1.13:2181,192.168.1.108:2181,192.168.1.143:2181	##连接zookeeper
zookeeper.connection.timeout.ms=18000
group.initial.rebalance.delay.ms=0
## 修改192.168.1.108的配置
broker.id=2
listeners=PLAINTEXT://:9092
advertised.listeners=PLAINTEXT://192.168.1.108:9092

修改192.168.1.143的配置
broker.id=3
listeners=PLAINTEXT://:9092
advertised.listeners=PLAINTEXT://192.168.1.143:9092
## 修改JVM参数 (根据需求修改)
kafka_heap_opts:指定堆大小,默认是1GB

[root@localhost kafka]# vim bin/kafka-server-start.sh 
if [ "x$KAFKA_HEAP_OPTS" = "x" ]; then
    export KAFKA_HEAP_OPTS="-Xmx2G -Xms2G -XX:MaxDirectMemorySize=1G"			## 修改这一行即可
fi

创建system启动文件

[root@localhost kafka]# vim /usr/lib/systemd/system/kafka.service

[Unit]
Description=kafka
After=network.target
Wants=network.target

[Service]
Type=simple
Environment="PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/app/idk/bin"
User=root
Group=root
ExecStart=/usr/local/kafka/bin/kafka-server-start.sh /usr/local/kafka/config/server.properties
Restart=always

[Install]
WantedBy=multi-user.target

启动zookeeper
[root@localhost kafka]# systemctl enable kafka.service
[root@localhost kafka]# systemctl start kafka.service

Cinco, pisando no poço

O serviço não pode iniciar, não pode encontrar o Java

/usr/local/kafka/bin/kafka-run-class.sh: linha 309: exec: java: não encontrado

第一种: 修改配置文件中的Java环境

## 修改kafka-run-class.sh 配置文件
[root@localhost kafka]# vim bin/kafka-run-class.sh
## 找到如下:
# Which java to use
if [ -z "$JAVA_HOME" ]; then
  JAVA="/usr/local/jdk/bin/java"   				## 修改到绝对路径
else
  JAVA="$JAVA_HOME/bin/java"
fi

第二种: 做个软连接

[root@localhost kafka]# echo $PATH
/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin:/home/laserx/.local/bin:/home/laserx/bin

[root@localhost kafka]# ln -s /usr/local/jdk1.8.0_251/bin/java /usr/local/bin/java

insira a descrição da imagem aqui

Acho que você gosta

Origin blog.csdn.net/anyRTC/article/details/127390405
Recomendado
Clasificación