1)  重复消费问题。

问题描述 
采用kafka读取消息进行处理时,consumer会重复读取afka队列中的数据。

问题原因 
kafka的consumer消费数据时首先会从broker里读取一批消息数据进行处理,处理完成后再提交offset。而我们项目中的consumer消费能力比较低,导致取出的一批数据在session.timeout.ms时间内没有处理完成,自动提交offset失败,然后kafka会重新分配partition给消费者,消费者又重新消费之前的一批数据,又出现了消费超时,所以会造成死循环,一直消费相同的数据。

解决方案 
项目中使用的是spring-kafka,所以把kafka消费者的配置enable.auto.commit设为false,禁止kafka自动提交offset,从而使用spring-kafka提供的offset提交策略。spring-kafka中的offset提交策略可以保证一批消息数据没有完成消费的情况下,也能提交offset,从而避免了提交失败而导致永远重复消费的问题。

2) Server.properties配置问题

borker,partition,replica 的配置之间的关系。

约束关系:Topic Partition Replicas Size <= Kafka Brokers Size。

创建Topic时直接指定Topic Partition Replica与Kafka Broker之间的存储映射关系

例如:kafka_2.10-0.8.2.1/bin/kafka-topics.sh --zookeeper ZooKeeperHost:ZooKeeperPort --create --topic TopicName --replica-assignment id0:id1:id2,id3:id4:id5,id6:id7:id8

其中,“id0:id1:id2,id3:id4:id5,id6:id7:id8”表示Topic TopicName一共有3个Partition(以“,”分隔),每个Partition均有3个Replica(以“:”分隔)

我们的策略:replicas >=2 ,确保有一个副本;partion=cpu cores,最大化利用多核并发。Brokers>=3 。根据gps数据量,系统吞吐量具体设计。

3) Zookeeper 问题。

Kafka集群强烈依赖zookeeper 来做集群的配置,状态,failover等机制。如果zookeeper集群出行问题,kafka集群也会不可用。所以要确保zookeeper集群的健康健壮。商用系统最少是3个zookeeper 集群节点,条件允许,应该是5个节点。

4) 消息保存时间。

无论消息是否被消费,kafka 都会保留所有消息。有两种策略可以删除旧数据:

1. 基于时间:log.retention.hours=168

2. 基于大小:log.retention.bytes=1073741824

需要注意的是,因为Kafka读取特定消息的时间复杂度为O(1),即与文件大小无关,所以这里删除过期文件与提高 Kafka 性能无关。我们选择基于文件大小的配置即可。

5) 机器内存配置,文件配置

内存不能少于1G,最好2G。/bin/zookeeper-server-start.sh 中的内存配置。

6) consumer group问题

high-level consumer API 提供了 consumer group 的语义,一个消息只能被 group 内的一个 consumer 所消费,且 consumer 消费消息时不关注 offset,最后一个 offset 由 zookeeper 保存。

使用 high-level consumer API 可以是多线程的应用,应当注意:

1. 如果消费线程大于 patition 数量,则有些线程将收不到消息

2. 如果 patition 数量大于线程数,则有些线程多收到多个 patition 的消息

3. 如果一个线程消费多个 patition,则无法保证你收到的消息的顺序,而一个 patition 内的消息是有序的

例如:我们根据车牌号设计消息路由到指定的partion,多线程消费时,在提升gps数据解析性能的情况下,每辆车的gps时序也不会错乱。每个消费线程消费一个partion的数据,多线程则可以并行处理多个partion的gps数据。

转载于:https://www.cnblogs.com/daila/p/9148869.html

汽车位置服务之kafka集群配置注意事项相关推荐

  1. ELK5.3+Kafka集群配置

    [一]资源准备 # 3台4C*8G, 安装Zookeeper.Kafka.Logstash--Broker(input: filebeat; output: Kafka) 10.101.2.23 10 ...

  2. 【kafka】Kafka 集群配置SASL+ACL

    1.概述 转载:https://www.cnblogs.com/xiao987334176/p/10110389.html 想根据这个做个试验,但是现在不行试试.以后用的时候试试 一.简介 在Kafk ...

  3. kafka集群配置(三台机器)

    前提:kafka基于zookeeper配置 解压安装包 ###将压缩包压缩到指定位置tar -zxvf kafka_2.11-1.01.tgz -C /usr/local/src/ 改名 mv kaf ...

  4. kafka集群配置之kafka启动了创建topic报错:Replication factor: 1 larger than avail

    大家好, 我是上白书妖! 知识源于积累,登峰造极源于自律 今天我根据以前所以学的一些文献,笔记等资料整理出一些小知识点,有不当之处,欢迎各位斧正 kafka启动了创建topic报错:Replicati ...

  5. kafka sasl java_Kafka 集群配置SASL+ACL

    ** Kafka 集群配置SASL+ACL 测试环境:** 系统: CentOS 6.5 x86_64 JDK : java version 1.8.0_121 kafka: kafka_2.11-1 ...

  6. kafka集群参数配置(下)

    今天我们继续来聊那些重要的 Kafka 集群配置,下半部分主要是 Topic 级别参数.JVM 参数以及操作系统参数的设置. 在上一期中,我们讨论了 Broker 端参数设置的一些法则,但其实 Kaf ...

  7. kafka的简单介绍以及docker-compose部署单主机Kafka集群

    Kafka简单介绍 Kafka是由Apache软件基金会开发的一个分布式.分区的.多副本的.多订阅者的开源流处理平台,由Scala和Java编写.Kafka是一种高吞吐量的分布式发布订阅消息系统,它可 ...

  8. kafka集群如何内外网均可访问

    有3台kafka集群broker,以下ip地址均属杜撰,仅仅做举例用 hostname 内网ip 外网Ip kafka1 10.0.0.1 139.0.0.1 kafka2 10.0.0.2 139. ...

  9. java进阶Kafka集群实战之原理分析及优化教程全在这里

    我不去想是否能够成功 既然选择了Java 便只顾风雨兼程 我不去想能否征服Kafka集群 既然钟情于Java 就勇敢地追随千锋 我不去想Kafka集群有多么晦涩难懂 既然目标是远方 留给世界的只能是努 ...

最新文章

  1. 有用的Python资料
  2. Java_01_环境变量的配置
  3. java wifi监听_Android 监听 WiFi 开关状态
  4. android string.xml中%1$s、%1$d等的用法
  5. matlab——图像细化
  6. 56 SD配置-科目分配-定义物料科目设置组
  7. 安装Linux操作系统
  8. 认识HTML5的WebSocket 1
  9. 拉勾数据分析岗数据分析报告
  10. 超级科学计算机bug,人类或生活在虚拟世界中,科学家发现三大宇宙BUG,让人细思极恐...
  11. ollvm源码分析之虚假控制流(2)
  12. 文献解读|基于转录组-蛋白质组数据联合分析对煎蛋水母毒性评价、毒素筛选及其干预
  13. matlab 贝塞尔函数 虚数,Bessel函数介绍.pdf
  14. pb公共变量怎么找_pb 实用方法
  15. thinkphp5中带参数跳转
  16. 3D人体姿态估计论文汇总(CVPR/ECCV/ACCV/AAAI)
  17. HDOJ3594-仙人掌图的判断
  18. xmind 使用详解
  19. php经常致命错误怎么办,如何捕获PHP中的致命错误(Fatal Errors)
  20. VDA 6.3 2022 EN 黄皮书.最新版 汽车质量VDA6.3-2022过程审核

热门文章

  1. mysql tomcat idea操作_IntelliJ IDEA + Tomcat + RestFul + Mysql打造属于自己的服务器
  2. delphi 鼠标获取窗口句柄_Windows窗口自定义,只需WindowTop一键设置
  3. pinctrl虚拟spi的linux驱动,linux内核pinctrl驱动的理解和总结
  4. 【spring-session】 1.x与2.x 不兼容
  5. zookeeper启动占用8080端口
  6. java getclass 相等_Java判断2个List集合是否相等(不考虑元素的顺序)
  7. 以下描述中不属于python语言控制结构的是_高中信息技术《Python语言》模块试卷...
  8. hue 添加jar_在hue下配置jdbc驱动
  9. html 保存xlsx,HTML SaveXLSX按钮防止将数据保存到SlickGrid的XLSX文件中
  10. python gps模块_一步一步使用uPyCraft学习MicroPython之GPS记录器