主页

索引

模块索引

搜索页面

6.1.6. 常见问题

Broker may not be available

现象:

$>  ./kafka-console-producer.sh --broker-list localhost:9092 --topic test

[2018-03-08 13:59:36,276] WARN [Producer clientId=console-producer] Connection to node -1 could not be established. Broker may not be available. (org.apache.kafka.clients.NetworkClient)
[2018-03-08 14:01:43,637] WARN [Producer clientId=console-producer] Connection to node -1 could not be established. Broker may not be available. (org.apache.kafka.clients.NetworkClient)
[2018-03-08 14:03:51,125] WARN [Producer clientId=console-producer] Connection to node -1 could not be established. Broker may not be available. (org.apache.kafka.clients.NetworkClient)

原因:

endpoints:["PLAINTEXT://172.28.50.143:9092"]

解决:

将localhost:9092改为PLAINTEXT://172.28.50.143:9092
$> ./kafka-console-consumer.sh --bootstrap-server PLAINTEXT://172.28.50.143:9092 --topic test

panic: kafka: client has run out of available brokers

  • 现象:

    panic: kafka: client has run out of available brokers to talk to
    (Is your cluster reachable?)
    
  • 过程:

    最近用golang写的一个项目用到kafka,在本地测试好好的,一到线上就有问题
    最后一点点调试找到原因,连接kafka server是成功的,但收到返回值是"EOF",最后找到原因
    
  • 原因:

    由于kafka的版本不一致导致的
    
  • 说明:

    kafka_2.10-0.8.2-beta.jar
    其中:
      2.10是Scala版本
      0.8.2-beta是Kafka版本
    

kafka如何保证这种有序性

问题:

如何保证消息消费的有序性呢?比如说生产者生产了0到100个商品,那么消费者在消费的时候按照0到100这个从小到大的顺序消费,
*** 那么kafka如何保证这种有序性呢?***
难度就在于,生产者生产出0到100这100条数据之后,通过一定的分组策略存储到broker的partition中的时候,
比如0到10这10条消息被存到了这个partition中,10到20这10条消息被存到了那个partition中,
这样的话,消息在分组存到partition中的时候就已经被分组策略搞得无序了。
那么能否做到消费者在消费消息的时候全局有序呢?
遇到这个问题,我们可以回答,在大多数情况下是做不到全局有序的。
但在某些情况下是可以做到的。比如我的partition只有一个,这种情况下是可以全局有序的。
那么可能有人又要问了,只有一个partition的话,哪里来的分布式呢?哪里来的负载均衡呢?
所以说,全局有序是一个伪命题!全局有序根本没有办法在kafka要实现的大数据的场景来做到。
但是我们只能保证当前这个partition内部消息消费的有序性。

结论:

一个partition中的数据是有序的吗?回答:间隔有序,不连续。

针对一个topic里面的数据,只能做到partition内部有序,不能做到全局有序。
特别是加入消费者的场景后,如何保证消费者的消费的消息的全局有序性,
这是一个伪命题,只有在一种情况下才能保证消费的消息的全局有序性,那就是只有一个partition。

主页

索引

模块索引

搜索页面