Kafka

  • Kafka,  技术

    Tcp/Ip如何工作 (Kafka producer机制)

    Application如果需要发送消息,是先发到操作系统的socket write buffer. 如果buffer(queue)满了,就是tcp congestion。同样的,外部来的消息会先到操作系统的socket receive buffer.如果buffer满了,操作系统就不会ack那个消息,也是congestion。 这个buffer的尺寸并不大,可以通过一下命令查询。参数分别代表,min, default, max: 之所以看到是因为看这篇文章http://cloudurable.com/blog/kafka-tutorial-kafka-producer-advanced-java-examples/index.html#:~:text=The%20Kafka%20Producer%20has%20a,acks%20to%20control%20record%20durability. 如果act是0,那么application只是把消息送到socket buffer就可以了。 还有一个配置参数 buffer.memory 这个是application level的setting,当broker无法访问,就会把消息放在内存中等待,在 max.block.ms 到期之前,send就会等待,到期就会抛一场。producer 也有重试机制。 但是这里有一个疑问,broker不可访问,是不是操作系统的socket write buffer也会满?我觉得不会,如果socket buffer满了就会影响所有的application,这个相当于外部的一个目标无法访问就导致所有的对外连接失效。应该是有一个机制操作系统知道外部网络不可送达,然后就会清楚缓存,告诉application目标不可达,然后application就会cache请求,然后不断的重试。 https://stackoverflow.com/questions/49649241/apache-kafka-batch-size-vs-buffer-memory