public synchronized Node start(final boolean startRpcServer) {
        if (this.started) {
            return this.node;
        }
        if (this.serverId == null || this.serverId.getEndpoint() == null
            || this.serverId.getEndpoint().equals(new Endpoint(Utils.IP_ANY, 0))) {
            throw new IllegalArgumentException("Blank serverId:" + this.serverId);
        }
        if (StringUtils.isBlank(this.groupId)) {
            throw new IllegalArgumentException("Blank group id:" + this.groupId);
        }
        //Adds RPC server to Server.
        NodeManager.getInstance().addAddress(this.serverId.getEndpoint());

        this.node = RaftServiceFactory.createAndInitRaftNode(this.groupId, this.serverId, this.nodeOptions);
        if (startRpcServer) {
            this.rpcServer.init(null);
        } else if (rpcServer == null || !rpcServer.isStarted()) {
            LOG.warn("RPC server is not started in RaftGroupService.");
        }
        this.started = true;
        LOG.info("Start the RaftGroupService successfully.");
        return this.node;
    }
Starts the raft group service, returns the raft node.

@param startRpcServer whether to start RPC server.
jraft-core/src/main/java/com/alipay/sofa/jraft/RaftGroupService.java