zoukankan      html  css  js  c++  java
  • kafka总结

    kafka的优点:

    解耦、冗余、扩展、灵活性,峰值处理能力、可恢复性、顺序保证、缓冲、异步通信

    kafka的组件:

    Break
    Topic
     partition
     group_id
    producer
    consumer

    kafka为什么吞吐量高?

    1. 磁盘顺序读写,pageCache使用Liunx来管理缓存
    2. 零拷贝:
      1. 传统的复制:磁盘文件->内核空间读取缓冲区->用户缓冲区(应用程序上下文)->socket缓冲区->网卡接口->消费者进程
      2. 零拷贝:磁盘文件->内核空间读取缓冲区->网卡接口->消费者进程
    3. 数据以分区形式存放:
      1. 并发读写,加速性能;
      2. 多分区存储,利于数据均衡;
        1. broker-->topic-->partition-->segment file segment file****:分为index索引文件和log数据文件,分别以后缀".index"和“.log”结尾。
    4. 批量压缩:
      1. 压缩后批量传输,降低网络带宽压力;

    kafka消息丢失的场景?

    1. 客户端:auto.commit.enable=true的时候,当消费者拉到消息后还没有处理结束,自动commit的提交间隔时间到,自动提交了offerset,而消费者这时挂了,重启后,之前的消息就丢失了。
    2. 服务端:网络压力过大,写磁盘很忙,写入失败,有没有重试,数据丢失。
    3. 磁盘损坏;
    4. 单批次数据的长度超过了限制会丢失数据。

    解决方案:

    1. 首先客户端要配置:auto.commit.enable=false没次结束手动提交commit offerset,确保数据都被正确消费;
    2. 其次服务端要配置:kafka一定要配置消息重试机制,并且重试时间一定要长,默认的一秒钟不符合生产环境;
    3. 配置高可用,多副本,保证数据完整性;
    4. 合理的设置flush间隔,kafka一开始数据都是存储到pagecache中,一定间隔才刷新到磁盘,消息开始不是存储到磁盘的,如果在刷新间隔出现了断电等,就会出现数据丢失。

    kafka扩容后,一部分消费者消费不到消息?可能是什么原因?

    如果你发现你的一个消费者客户端A已经启动了,但是就是不消费消息,此时你应该检查一下该消费者所在的组中(ConsumerGroup)是否还有其他的消费者,topic的分区可能被组中其他的消费者线程抢走(负载均衡机制),从而导致消费者客户端A连一个分区都没有得到,自然消费不到消息。

    双集群模式下,kafka的顺序存储会出现什么问题?还能保证消息的顺序性吗?

    博客园

  • 相关阅读:
    【Elasticsearch 技术分享】—— ES 常用名词及结构
    【Elasticsearch 技术分享】—— Elasticsearch ?倒排索引?这都是什么?
    除了读写锁,JUC 下面还有个 StampedLock!还不过来了解一下么?
    小伙伴想写个 IDEA 插件么?这些 API 了解一下!
    部署Microsoft.ReportViewe
    关于TFS强制undo他人check out
    几段查看数据库表占用硬盘空间的tsql
    How to perform validation on sumbit only
    TFS 2012 Disable Multiple Check-out
    在Chrome Console中加载jQuery
  • 原文地址:https://www.cnblogs.com/czbcxy/p/14519026.html
Copyright © 2011-2022 走看看