顺序消费和分区的共存问题:
假设有一个公共的参数设置系统,通过它进行参数配置,然后发送到kafka。各个子系统订阅相关的主题,获取最新的参数。
这种场景,顺序消费是确保参数正确性。所以我的理解是,只能将该主题设置一个分区,这样参数就全部写在这里了。正常来讲应该能最大限度的按修改的先后顺序被生产者发送到这里,然后消费者也能顺序的消费。这样才能保证最后一次的修改在子系统中体现出来。
如果有多个分区,能减缓发送的压力。但是一个消费者只能按分区消费,不能跨分区。如果修改记录被均匀的分散在各个分区,那么最终会导致消费者获取的消息并不一定是最新的。
broker 被kill掉后,发送/消费异常
我配置了 bootstrap.servers=192.168.100.238:9092,192.168.100.238:9093,192.168.100.238:9094
同样,在kafka服务器查看:
[root@localhost kafka_2.12-0.11.0.3-1]# bin/kafka-topics.sh --describe --zookeeper 127.0.0.1:2181 --topic QQQQQQ_topic7
Topic:QQQQQQ_topic7 PartitionCount:1 ReplicationFactor:3 Configs:
Topic: QQQQQQ_topic7 Partition: 0 Leader: 0 Replicas: 0,1,2 Isr: 2,0,1
然后我将 broker0的进程kill掉了。再看:
[root@localhost kafka_2.12-0.11.0.3-1]# bin/kafka-topics.sh --describe --zookeeper 127.0.0.1:2181 --topic QQQQQQ_topic7
Topic:QQQQQQ_topic7 PartitionCount:1 ReplicationFactor:3 Configs:
Topic: QQQQQQ_topic7 Partition: 0 Leader: 1 Replicas: 0,1,2 Isr: 2,1
这个时候,Leader: 1 , Isr: 2,1
程序中配置的bootstrap.servers 没有变化。
此时出现的情况是:生产者能发送消息,但是间歇性出现
java.net.ConnectException: Connection refused: no further information
at sun.nio.ch.SocketChannelImpl.checkConnect(Native Method)
at sun.nio.ch.SocketChannelImpl.finishConnect(SocketChannelImpl.java:712)
at org.apache.kafka.common.network.PlaintextTransportLayer.finishConnect(PlaintextTransportLayer.java:50)
at org.apache.kafka.common.network.KafkaChannel.finishConnect(KafkaChannel.java:95)
at org.apache.kafka.common.network.Selector.pollSelectionKeys(Selector.java:370)
at org.apache.kafka.common.network.Selector.poll(Selector.java:334)
at org.apache.kafka.clients.NetworkClient.poll(NetworkClient.java:433)
at org.apache.kafka.clients.producer.internals.Sender.run(Sender.java:224)
at org.apache.kafka.clients.producer.internals.Sender.run(Sender.java:162)
at java.lang.Thread.run(Thread.java:745)
而消费者就一直在刷刷。。。。并不能正常消费消息。
问题:Leader 不是已经重新选举了吗?是它内部又分配到了 broker0?
请指导。
持续的吗,消费者?
我看你已经切换成功了。
你的客户端的版本和生产一一对应吗?
你的答案