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。