一台Linux主机搭建kafka集群

本文详细介绍Kafka集群的搭建过程,包括Kafka和Zookeeper的安装配置、多节点配置及集群启动步骤,并通过创建主题、启动生产者与消费者进行集群功能验证。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、搭建Zookeeper集群

二、kafka broker集群搭建

  • kafka 下载、解压
    wget http://apache.opencas.org/kafka/0.9.0.1/kafka_2.11-0.9.0.1.tgz
    tar -xzf kafka_2.11-0.9.0.0.tgz
  • kafka broker配置文件修改
    修改kafka根目录下的config/server.properties
    broker.id=0 #整个集群内唯一id号,整数,一般从0开始
    listeners=PLAINTEXT://192.168.6.56:9092 #协议、当前broker机器ip、端口,此值可以配置多个,应该跟SSL等有关系,更多用法尚未弄懂,这里修改为ip和端口。
    port=9092 #broker端口
    host.name=192.168.6.56 #broker 机器ip
    log.dirs=/zyxx_data/kafka-logs/kafka00 #kafka存储数据的目录
    zookeeper.connect=192.168.6.56:2181,192.168.6.56:2182,192.168.6.56:2183 #zookeeper 集群列表
  • kafka broker多节点配置

    kafka多节点配置,可以像zookeeper一样把软件目录copy多份,修改各自的配置文件。这里介绍另外一种方式:同一个软件目录程序,但使用不同的配置文件启动

    使用不同的配置文件启动多个broker节点,这种方式只适合一台机器下的伪集群搭建,在多台机器的真正集群就没有意义了

  • 把kafka根目录下的config/server.properties copy两份,名称分别修改为:server-1.properties 、server-2.properties。各自修改他们的配置如下:

    config/server-1.properties

    broker.id=1 
    listeners=PLAINTEXT://192.168.6.56:9093
    port=9093 
    host.name=192.168.6.56
    log.dirs=/zyxx_data/kafka-logs/kafka01 
    zookeeper.connect=192.168.6.56:2181,192.168.6.56:2182,192.168.6.56:2183

    config/server-2.properties

    broker.id=2 
    listeners=PLAINTEXT://192.168.6.56:9094
    port=9094 
    host.name=192.168.6.56
    log.dirs=/zyxx_data/kafka-logs/kafka02 
    zookeeper.connect=192.168.6.56:2181,192.168.6.56:2182,192.168.6.56:2183

集群启动

  • zookeeper集群启动

    进入到/var/zookeeper/目录,执行

    zookeeper00/bin/zkServer.sh start
    zookeeper01/bin/zkServer.sh start
    zookeeper02/bin/zkServer.sh start

    我们可以通过以下命令查看zookeeper是否已启动

    ps -ef | grep zoo.cfg

    查看zookeeper进程信息
  • kafka 集群启动

    进入到kafka目录,执行

    bin/kafka-server-start.sh -daemon config/server.properties
    bin/kafka-server-start.sh -daemon config/server-1.properties
    bin/kafka-server-start.sh -daemon config/server-2.properties

    "-daemon" 参数代表以守护进程的方式启动kafka server。
    官网及网上大多给的启动命令是没有"-daemon"参数,如:“bin/kafka-server-start.sh config/server.properties &”,但是这种方式启动后,如果用户退出的ssh连接,进程就有可能结束,具体不清楚为什么。

    我们可以通过以下命令查看kafka server是否已启动

    ps -ef | grep config/server

    查看kafka server进程信息

测试

为了简单起见,这里通过命令行的方式启动生产者和消费者进行测试。

  • 创建主题

    进入到kafka目录,创建“test5”topic主题:分区为3、备份为3的

    bin/kafka-topics.sh --create --zookeeper 192.168.6.56:2181,192.168.6.56:2182,192.168.6.56:2183 --replication-factor 3 --partitions 3 --topic test5

    --zookeeper : zookeeper集群列表,用英文逗号分隔。可以不用指定zookeeper整个集群内的节点列表,只指定某个或某几个zookeeper节点列表也是你可以的
    replication-factor复制数目,提供failover机制;1代表只在一个broker上有数据记录,一般值都大于1,代表一份数据会自动同步到其他的多个broker,防止某个broker宕机后数据丢失。
    partitions一个topic可以被切分成多个partitions,一个消费者可以消费多个partitions,但一个partitions只能被一个消费者消费,所以增加partitions可以增加消费者的吞吐量。kafka只保证一个partitions内的消息是有序的,多个一个partitions之间的数据是无序的。

    查看"test5"主题详情

    bin/kafka-topics.sh --describe --zookeeper  192.168.6.56:2181 --topic test5

    test5 topic详情
  • 启动生产者、消费者

    启动生产者

    bin/kafka-console-producer.sh --broker-list 192.168.6.56:9092 --topic test5

    --broker-list : 值可以为broker集群中的一个或多个节点

    启动消费者(在新的ssh连接窗口)

    bin/kafka-console-consumer.sh --zookeeper 192.168.6.56:2181 --topic test5 --from-beginning

    --zookeeper : 值可以为zookeeper集群中的一个或多个节点

    我们可以发现,在生产者下输入一个消息,回车后可以在消费者下输出,说明我们集群搭建的没问题


    生产者和消费者
  • 模拟kafka broker集群某个节点宕机

    我们直接通过kill 进程来模拟


    再观察 生产者和消费者


    某个broker节点宕机后的生产者消费者

    我们可以发现,消费者出现了警告信息,但是依旧可以消费数据。

  • 模拟zookeeper集群某个节点宕机

    我们直接通过kill 进程来模拟


    再观察 生产者和消费者


    某个zookeeper节点宕机后的生产者和消费

    我们可以发现,消费者依旧可以消费数据。
    这就说明我们整个集群环境的搭建已经成功。

    注意一点,你启动消费者时在命令中只指定了一个zookeeper节点,且模拟zookeeper某个节点宕机时,你kill掉的正好又是这个节点。这种情况下你的消费者会不停的报警告信息,但是不影响消费信息。

转自:http://www.jianshu.com/p/dc4770fc34b6
### 在Linux单机系统上模拟或搭建集群的方法和工具 在Linux单机系统上搭建集群,可以通过配置不同的端口和服务实例来模拟多台主机的环境。以下是几种常见的集群搭建方法和工具: #### 1. **FastDFS集群** FastDFS 是一个开源的分布式文件系统。在单机环境下,可以通过创建软链接和配置多个服务实例来模拟集群环境。 ```bash ln -s /usr/bin/fdfs_trackerd /usr/local/bin ln -s /usr/bin/fdfs_storaged /usr/local/bin ln -s /usr/bin/stop.sh /usr/local/bin ln -s /usr/bin/restart.sh /usr/local/bin ``` 配置文件中需要为每个存储节点设置不同的端口和数据目录[^1]。 #### 2. **ZooKeeper集群** ZooKeeper 是一个分布式的协调服务。在单机环境下,可以启动多个ZooKeeper实例,每个实例绑定不同的端口。 ```bash cd /usr/local/apache-zookeeper-3.8.2/bin ./zkCli.sh ls / ``` 每个ZooKeeper实例的配置文件(`zoo.cfg`)中需要指定不同的 `clientPort` 和 `dataDir`[^2]。 #### 3. **Kafka集群** Kafka 是一个分布式消息队列系统。在单机环境下,可以通过启动多个Kafka broker实例来模拟集群。 ```bash ./bin/kafka-topics.sh --bootstrap-server localhost:9092 --create --replication-factor 3 --partitions 2 --topic topic0921 ./bin/kafka-topics.sh --bootstrap-server localhost:9092 --describe --topic topic0921 ``` 每个Kafka broker的配置文件(`server.properties`)中需要设置不同的 `broker.id`、`port` 和 `log.dirs`[^2]。 #### 4. **Redis集群** Redis 集群可以通过在单机上启动多个Redis实例来模拟。每个实例运行在不同的端口上,并通过配置文件指定集群模式。 ```bash ps -ef | grep redis kill -9 <PID> ``` 每个Redis实例的配置文件(`redis.conf`)中需要设置不同的 `port` 和 `cluster-enabled`[^3]。 #### 5. **Elasticsearch集群** Elasticsearch 是一个分布式搜索和分析引擎。在单机环境下,可以通过启动多个Elasticsearch实例来模拟集群。 ```yaml cluster.name: my-elasticsearch node.name: node-1 http.port: 9201 transport.tcp.port: 9301 discovery.seed_hosts: ["127.0.0.1:9301", "127.0.0.1:9302", "127.0.0.1:9303"] cluster.initial_master_nodes: ["node-1", "node-2", "node-3"] ``` 每个Elasticsearch节点的配置文件中需要设置不同的 `node.name`、`http.port` 和 `transport.tcp.port`[^4]。 ### 工具推荐 - **Docker**:使用Docker容器可以在单机上轻松创建多个隔离的环境,每个容器模拟一台主机。 - **VirtualBox/KVM**:通过虚拟化技术创建多个虚拟机,每个虚拟机运行一个集群节点。 - **Ansible**:自动化部署工具,可以简化集群的配置和管理。 ```python # 示例:使用Python脚本生成多个配置文件 def generate_config(node_name, http_port, tcp_port): config = f""" cluster.name: my-elasticsearch node.name: {node_name} http.port: {http_port} transport.tcp.port: {tcp_port} """ return config print(generate_config("node-1", 9201, 9301)) ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值