Logstash HA 实现

本文通过测试探讨了Logstash在Kafka集群中的高可用性。在单节点Logstash配置中,当连接的Kafka broker宕机,Logstash无法自动切换到其他broker。而在多节点Logstash配置下,通过增加topic分区,即使部分broker故障,数据仍能被正常处理。Logstash能够主动连接到集群中其他有效的broker,确保数据流的连续性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

背景

为了实现 kafka 集群的大批量数据的实时性处理,需要多个 logstash 将其入 es,需要测试 logstash 的 loadbalance 和 HA 能力,因此设计以下测试场景。

Kafka 集群——单节点 logstash

kafka topic

# 创建 topic
bin/kafka-topics.sh --create --bootstrap-server 10.124.5.222:9092 --replication-factor 3 --partitions 1 --topic test-for-cluster

# 查看 topic 信息
# 集群的话,只用写一个节点即可查询该 topic 所有信息
bin/kafka-topics.sh --describe --bootstrap-server 10.124.5.222:9092 --topic test-for-cluster
# Topic: test-for-cluster TopicId: 7pUGR0RYTSO0pfLDcN6BnA PartitionCount: 1       ReplicationFactor: 3
# Configs: Topic: test-for-cluster Partition: 0    Leader: 1       Replicas: 1,2,0 Isr: 1,2,0

PartitionCount:partition 个数。
ReplicationFactor:副本个数。
Partition:partition 编号,从 0 开始递增。
Leader:当前 partition 起作用的 breaker.id。
Replicas: 当前副本数据所在的 breaker.id,是一个列表,排在最前面的其作用。
Isr:当前 kakfa 集群中可用的 breaker.id 列表。

从上述信息中可以得知,topic test-for-cluster 起作用的 leader partition 是在 broker1 上,也就是 10.124.5.190。因此,在测试的时候,将 logstash 的 bootstrap_servers 指向 10.124.5.190,然后将该 broker 中断进行测试。

Kafka producer

import json
from datetime import datetime
import time

from kafka import KafkaProducer

producer = KafkaProducer(bootstrap_servers='10.124.5.191:9092',
                         value_serializer=lambda msg: json.dumps(msg).encode(),
                         api_version=(2, 13))
topic = 'test-for-cluster'
for i in range(0, 100):
    data = {
   
        'num': i,
        'time': datetime.now().strftime('%Y-%m-%d %H:%M:%S')
    }
    print(data)
    producer.send(topic, data)
    time.sleep(1)

Logstash 配置

input{
   
  kafka{
   
    bootstrap_servers => "10.124.5.190:9092"
    client_id => "node0"
    group_id => "kafka2es"
    auto_offset_reset => "latest"
    consumer_threads => 1
    decorate_events => "true"
    topics => ["test-for-cluster"]
    type => "kafka2es"
  }
}

filter {
   
  json {
   
    source => "message"
  }
}

output{
   
  elasticsearch{
   
    hosts => ["10.124.5.222:9200"]
    data_stream 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值