常用知识点问答

kafka如何部署?

  • 先说明kafka的版本
  • 如果是 2.X 版本,则要先部署 3或5 个服务器的zookeeper集群,然后在每个zookeeper服务器上部署kafka应用。
  • 如果是 3.X 版本,kafka不再依赖zookeeper,所以可以直接在java17的环境上部署 3或5 个服务器的kafka集群。
  • zookeeper在kafka集群中有什么作用?

  • 管理集群元数据:Zookeeper负责存储Kafka的元数据,包括Broker列表、主题信息和分区信息
  • Leader选举:当一个Kafka分区的Leader节点失效时,Zookeeper帮助选举新的Leader节点
  • 配置管理:Zookeeper提供了Kafka的配置管理,确保各个节点的配置一致
  • 集群成员管理:Zookeeper追踪Kafka集群中的所有Broker,并通知它们的状态变化
  • kafka如何保证数据的可靠性?

  • kafka是通过 ack 应答机制来保证数据的可靠性。
  • 在生产者配置文件producer.properties中设置ack应答机制参数 acks
  • acks 参数值设置为
  • 0,表示生产者不等待kafka确认就会继续发送下一条消息。此机制性能最高,但可靠性最低,当leader的broker故障可能会导致数据丢失
  • 1(默认值),表示生产者会等待leader接收数据并确认后才会发送下一条数据。此机制性能其次,可靠性一般,当follower同步备份完成前leader故障可能会导致数据丢失
  • -1或all,表示生产者需要等待所有的follower都同步备份完成并确认后才会发送下一条数据。此机制性能最低,可靠性最高。

kafka如何保证消息顺序?

  • 分区级别顺序:Kafka保证分区(partition)内的消息是有序的,Producer在发送消息时指定分区
  • 单Producer顺序:当同一Producer发送消息到同一分区时,消息的顺序能得到保证
  • 有序消费:消费者在同一分区内读取消息时,能按发送顺序读取
  • kafka的消息堆积和消息并发发送性能低的问题原因,排查步骤和解决方案?

原因

  • Broker处理能力不足
  • 网络带宽瓶颈
  • 磁盘I/O性能差
  • 配置不合理

排查步骤

  1. 监控Kafka集群:使用Kafka自带的监控工具或Prometheus、Grafana等第三方工具。
  2. 检查Broker日志:查看Kafka Broker的日志文件,找出错误和警告信息。
  3. 查看Zookeeper状态:确保Zookeeper运行正常,没有延迟。
  4. 分析网络带宽:使用网络监控工具(如iftop、netstat)检查网络带宽是否饱和。
  5. 评估磁盘I/O:使用iostat等工具检查磁盘I/O情况。

解决方案

  • 增加Broker节点,提高集群处理能力。
  • 优化Producer和Consumer配置,如增大批量大小、压缩数据等。
  • 优化Kafka Broker配置,如调整分区数、副本数等。
  • 升级硬件资源,如使用更快的磁盘和网络设备。

ELK的各个组件的作用和工作原理?

  • Logstash          
  • 负责采集日志数据,还可通过插件模块对日志数据进行过滤、格式化处理,再输出给ElasticSearch
  • 支持多实例部署,由input、filter、output插件模块组成
  • ElasticSearch     
  • 负责对日志数据进行分片、存储,并创建索引,方便全文检索
  • 集群化部署,节点分三种类型:master/data/client;通过设置相同的集群名称cluster.name,并使用Zen Discovery发现模块实现单播列表中的节点发现
  • Kibana
  • 用于接入ElasticSearch的数据源,将日志数据进行图形化展示,方便用户通过浏览器查看、搜索、分析日志
  • Filebeat
  • 用于替代Logstash采集日志数据,优点:比Logstash更轻量,资源消耗更少
  • Fluentd
  • 也是Logstash的一种替代方案,可用于替代Logstash采集日志数据和过滤转换等功能,常用于收集K8S环境中的容器日志
  • Kafka/Redis
  • 作为消息队列MQ,实现流量销峰、缓冲、应用解耦等功能

工作原理

  1. 在所有需要收集日志的服务器上部署 Logstash;或者先将日志进行集中化管理在日志服务器上,在日志服务器上部署 Logstash。
  2. Logstash 收集日志,将日志格式化并输出到 Elasticsearch 群集中。
  3. Elasticsearch 对格式化后的数据进行索引和存储。
  4. Kibana 从 ES 群集中查询数据生成图表,并进行前端数据的展示
  5. ELK如何优化?

logstash优化

  • 加大服务器内存和JVM堆内存
  • 用多实例做负载均衡
  • 使用filebeat替代logstash采集日志数据

elasticsearch优化

因为ES作为日志存储时的特性是:高并发写、读少、接受一定的延时、可容忍部分日志数据的丢失。所以ES会围绕以下几个方面进行优化:

1)对索引进行优化:优化fsync,适当加大刷盘间隔时间(index.translog.sync_interval,默认值为5s,可调整为30s或60s)

优化refresh,适当加大把内存数据写入Lucene的间隔时间(index.refresh_interval,默认值为1s,可调整为5s或10s)

优化merge,根据硬盘的性能适当调整merge的线程数(index.merge.scheduler.max_thread_count,默认值为max,可调整为1,设置为1可允许最多3个并发的merge线程数)

2)优化write线程池配置,减少拒绝任务的情况:修改ES配置文件elasticsearch.yml,设置write线程为 CPU核数+1

thread_pool:

  write:

    size: N    #N为CPU核数+1

3)锁定内存,不让ES使用swap:swapoff -a ,关闭swap

                             修改内核参数 vm.swappiness=1,使系统尽量不使用swap

 修改ES配置文件:bootstrap.memory_lock: true ,启动ES锁定内存

4)适当的减少索引的分片数、副本数

分片数:index.number_of_shards,默认值为5,索引大小较小时,可调整分片数为3

副本数:index.number_of_replicas,默认值为1,即每个索引会有一份额外的副本数据,对于日志数据不需要太高的安全性,有1个副本即可,所以可调整副本数为0

你们的生产环境中ElasticSearch群集部署了多少台节点?如何实现ES群集的节点发现?ES群集中有哪些类型的节点和其作用,以及如何分配各节点的数量?

### 生产环境中ElasticSearch集群部署节点数量

在生产环境中,Elasticsearch集群的部署节点数量和类型会根据具体的业务需求、数据量和查询负载来决定

### 如何实现ES集群的节点发现

Elasticsearch集群中的节点发现可以通过多种方法实现,以下是常用的方法:

1. **单播发现(Unicast Discovery)**:

   配置静态的主节点列表,每个节点在启动时会通过这个列表找到其他主节点。适用于静态环境。

2. **多播发现(Multicast Discovery)**:

   Elasticsearch支持多播发现,可以通过广播方式发现集群中的其他节点。但在生产环境中不建议使用多播,因为它在大规模网络中不可靠且难以调试。

3. **基于云服务的发现(Cloud Discovery)**:

   使用云服务提供的API(如AWS、GCP)进行节点发现,适用于动态环境,能自动发现和加入集群。

### 节点类型及其作用

1. **主节点(Master Node)**:

   - 负责管理集群状态和元数据。

   - 进行分片的创建、删除和分配。

   - 进行节点的添加和移除。

   2. **数据节点(Data Node)**:

   - 存储和管理数据。

   - 执行数据相关的CRUD操作和搜索请求。

   - 提供索引和查询的计算资源。

3. **协调节点(Coordinating Node)**:

   - 处理客户端请求。

   - 分发搜索请求到相应的数据节点并合并结果。

   - 适用于减少数据节点的负载。

4. **冷数据节点(Cold Data Node)**:

   - 存储冷数据,即不常访问的历史数据。

   - 降低存储成本,适用于较便宜的存储设备。

5. **机器学习节点(ML Node)**:

   - 运行机器学习任务。

   - 进行数据分析和预测。

   - 独立于数据节点以提高任务执行效率。

### 如何分配各节点的数量

- **主节点**:通常设置为3个,确保高可用性,避免单点故障。

- **数据节点**:根据数据量和查询负载进行分配,建议保持在10-20个之间,确保数据存储和查询的高效性。

- **协调节点**:根据查询请求的负载,设置2-4个,以提高查询性能。

- **冷数据节点**:根据历史数据的存储需求,设置3-5个,降低存储成本。

- **机器学习节点**:根据机器学习任务的复杂度和数量,设置2-3个,确保任务高效执行。

通过合理配置和管理Elasticsearch集群的节点类型和数量,可以有效提高集群的性能、稳定性和扩展性。

如何管理ES的索引?并举例

创建索引    

curl -X PUT  'http://ES-IP:9200/<索引名>/<类型>/<ID>?pretty&pretty' \

-H 'content-Type: application/json'  -d '{"键1":"值1","键2":"值2"}'

删除索引    

curl -X DELETE  'http://ES-IP:9200/<索引名>'

查看索引配置

curl -X GET  'http://ES-IP:9200/<索引名>/_settings'

修改索引配置

curl -X PUT  'http://ES-IP:9200/<索引名>/_settings' \

-H 'content-Type: application/json'  -d '{"键":"值"}'

创建索引别名

curl -X POST 'http://ES-IP:9200/_aliases' \

-H 'Content-Type: application/json'  -d '{"actions":[{"add":{"index":"索引名","alias":"索引别名"}}]}'

删除索引别名

curl -X POST 'http://ES-IP:9200/_aliases' \

-H 'Content-Type: application/json'  -d '{"actions":[{"remove":{"index":"索引名","alias":"索引别名"}}]}'

  • 18
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值