• 丰富
    2019-06-20
    G1是jdk9中默认的,jdk8还是需要显式指定的

    作者回复: 嗯嗯,笔误了。多谢纠正 :)

     2
     34
  • aoe
    2019-06-20
    ulimit -n这个参数说的太好了!如果不设置,单机在Centos7上几百的并发就报“Too many open files”了。网上搜索后设置成65535,用JMater压测单机也只能支撑到1000左右的并发,原来这个值可以设置到1000000!《Kafka权威指南》上说Kafka单机可以轻松处理300万并发;《响应式架构:消息模式Actor实现与Scala、Akka应用集成》上说Scala用Actor单机可以处理5000万并发。请问胡老师有没有推荐的Linux方面的书籍,可以详细解答ulimit -n参数、如何知道单台Linux机器可以处理的连接数上线?
    我在mac笔记本上用Go开启了10万个goroutine,压测服务器,结果得到异常“Too many open files”,后来也修改了ulimit -65535,但也只能保证1万左右的请求正常,请问Mac上也是只要设置ulimit -n参数就可以将请求的连接数提升到上限吗?
    
     18
  • saup007
    2019-06-21
    修改 Topic 级 max.message.bytes,还要考虑以下两个吧?
    还要修改 Broker的 replica.fetch.max.bytes 保证复制正常
    消费还要修改配置 fetch.message.max.bytes

    作者回复: 是的,您考虑得很全面:)

    
     15
  • 赌神很低调
    2019-06-24
    胡老师,kafka认为写入成功是指写入页缓存成功还是数据刷到磁盘成功算成功呢?还是上次刷盘宕机失败的问题,页缓存的数据如果刷盘失败,是不是就丢了?这个异常会不会响应给生产者让其重发呢?

    作者回复: 写入到页缓存即认为成功。如果在flush之前机器就宕机了,的确这条数据在broker上就算丢失了。producer端表现如何取决于acks的设定。如果是acks=1而恰恰是leader broker在flush前宕机,那么的确有可能消息就丢失了,而且producer端不会重发——因为它认为是成功了。

    
     6
  • Xiao
    2019-06-20
    帅气的胡老师,后边是否会将Kafka数据丢失和消息重复的场景以以及解决思路!

    作者回复: 会有的,后面有防止消息丢失和重复消费,到时候一起讨论哈

    
     5
  • Hello world
    2019-06-20
    老师说的无脑配置给jvm heap 6G大小,这应该也看机器的吧,现在机器的内存也越来越大,我们这的机器都是64G 内存,配了16G的heap,老师觉得可以优化吗

    作者回复: 虽然无脑推荐6GB,但绝不是无脑推荐>6GB。一个16GB的堆Full GC一次要花多长时间啊,所以我觉得6GB可以是一个初始值,你可以实时监控堆上的live data大小,根据这个值调整heap size。只是因为大内存就直接调整到16GB,个人觉得不可取。

    另外堆越小留给页缓存的空间也就越大,这对Kafka是好事啊。

    
     4
  • aof
    2019-06-20
    老师Java8默认GC是Parallel GC,Java9默认才是G1

    作者回复: 嗯嗯 ,是的。记错了:( PS: 这是我今天第三次认错:)

    
     4
  • 黎
    2019-06-29
    老师的美式英语发音真标准
    
     3
  • cricket1981
    2019-06-21
    kafka streams或者ksql的性能参数调优有什么建议和参考资料吗?

    作者回复: Kafka Streams的性能调优建议:https://www.confluent.io/blog/optimizing-kafka-streams-applications

    KSQL本专栏不会涉及,目前我也给不出相应的建议,因为我。。。。我也不会😳

    
     3
  • Geek_Sue
    2019-06-20
    胡老师,您好,文章中提到的JVM版本问题,是否有比较好的建议呢?Java版本对于Kafka的性能方面影响大吗?

    作者回复: Kafka 2.0已经不支持Java 7了,2.1版本开始初步支持Java 11,但不建议生产环境用11,所以还是使用Java 8吧。

    性能方面,如果是Linux平台,性能的差异主要还是Java版本升级带来的差异吧,应该说影响不是太大。

     1
     2
  • 吃饭饭
    2019-06-20
    Java8默认的新生代垃圾回收器是:UseParallelGC,可以用-XX:+PrintCommandLineFlags -version查看,还有如果显示指定 -XX:+UseCurrentMarkSweepGC 的话,会默认开启 -XX:+UseParallelGC

    作者回复: 嗯嗯 ,这点笔误了。Java 9默认的GC收集器才是G1。Java 8应该还是吞吐量收集器。

    
     2
  • 刘朋
    2019-06-20
    系统会根据LRU算法定期将页缓存上的 脏 数据落盘到物理磁盘上. 这个定期就是由提交时间来确定的,默认是5秒.

    这个时间如何设置? 是内核参数吗?

    作者回复: 不算内核参数,是文件系统的参数。你可以查询一下文件系统手册。比如ext4就是commit=Nseconds这样设置

    
     2
  • 张振宇
    2019-11-19
    老师,怎么能限制消费者的消费速度,或者限制消费带宽啊,

    作者回复: 这是我之前写的,可以参考下:https://www.cnblogs.com/huxi2b/p/8609453.html

    
     1
  • King Yao
    2019-07-05
    多个日志段文件?这个没太理解,老师能详细说下吗,谢谢。

    作者回复: 路径下有多个.log文件才有可能删除消息,如果只有一个.log文件是不会开启的,即使满足条件也不行。

    
     1
  • 小头针
    2019-06-26
    胡老师,在本课程最后留的问题,又成功的引起了我的注意,我曾经因为kafka假死,不知原因为何,而尝试过设置Broker的内存为(32G/256G),然而进程假死更加频繁(后面检测是那个版本存在线程死锁)。后来还是设置为16G了。当然我这真真的是无脑设置。我也看到了评论了胡老师的建议,很值得参考。
    另外,胡老师在这节课里,讲到了页缓存,我想请问一下这个页缓存它存在的意义和作用,以及它在整个过程中的机制又是怎样的呢?

    作者回复: 页缓存属于磁盘缓存(Disk cache)的一种,主要是为了改善系统性能。重复访问磁盘上的磁盘块是常见的操作,把它们保存在内存中可以避免昂贵的磁盘IO操作。

    既然叫页缓存,它是根据页(page)来组织的内存结构。每一页包含了很多磁盘上的块数据。Linux使用Radix树实现页缓存,主要是加速特定页的查找速度。另外一般使用LRU策略来淘汰过期页数据。总之它是一个完全由内核来管理的磁盘缓存,用户应用程序通常是无感知的。

    如果要详细了解page cache,可以参见《Understanding the Linux Kernel》一书的第15章

    
     1
  • 赌神很低调
    2019-06-22
    “如果在页缓存中的数据在写入到磁盘前机器宕机了,那岂不是数据就丢失了。的确,这种情况数据确实就丢失了,但鉴于 Kafka 在软件层面已经提供了多副本的冗余机制,因此这里稍微拉大提交间隔去换取性能还是一个合理的做法。“即使提供了副本,这种情况数据也会丢吧?还是说这部分数据会重发?

    作者回复: 我的意思是至少还有其他正常的副本可以使用。。。这个副本重启回来后会重新加载日志段,获取到当前末端位移,因此也能感知刚才为成功写入的消息并重新拉取之~~

     2
     1
  • 南山
    2019-06-20
    是不是要根据服务器性能来设置呢?比如机器的总内存是多少,单运行kafka的话,再针对性的按比例设置jvm内存大小呢?无脑设置6g也是在一定规格的服务器配置的情况下吧

    作者回复: 有道理。这里给出的6GB一般对那些很多的生产服务器而言的。如果只有8GB的服务器,自然不建议分配这么大的heap size。

    另外监控堆占用也是sizing的一个好办法,特别是监控Full GC之后的live data大小。

    
     1
  • theivanxu
    2019-06-20
    最近环境中有一台3G堆内存的节点在某个topic handle request的时候一直OOM,调整到5G重启后恢复正常,很想知道如何评判堆内存大小设置的标准。

    作者回复: 没有通用的标准,只有一个最佳实践值:6GB。最好还是监控一下实时的堆大小,特别是GC之后的live data大小,通常将heapsize设置成其1.5~2倍就足以了

    
     1
  • 风中花
    2019-06-20
    给老师点个赞!按时发布!辛苦
    
     1
  • 小可
    2019-09-27
    老师好,我这边单机kafka,400个client,出现这个错误
    ulimit 和 file-max都调大了,还是报错

    ERROR Error while accepting connection (kafka.network.Acceptor)
    java.io.IOException: No file descriptors available
        at sun.nio.ch.ServerSocketChannelImpl.accept0(Native Method)
        at sun.nio.ch.ServerSocketChannelImpl.accept(ServerSocketChannelImpl.java:422)
        at sun.nio.ch.ServerSocketChannelImpl.accept(ServerSocketChannelImpl.java:250)
        at kafka.network.Acceptor.accept(SocketServer.scala:460)
        at kafka.network.Acceptor.run(SocketServer.scala:403)
        at java.lang.Thread.run(Thread.java:748)

    展开

    作者回复: 最好确认下是否真的修改成功,比如是否是在/etc/security/limits.conf中修改的,这个才是永久生效的配置

     1
    
我们在线,来聊聊吧