본관은 광산(光山). 자는 무숙(懋叔), 호는 광남(光南). 할아버지는 산림(山林) 김장생(金長生)이고, 아버지는 참판 김반(金槃)이며, 어머니는 첨추(僉樞) 김진려(金進礪)의 딸이다.
음보로 등용되어 의금부도사·남원부사·사복시첨정(司僕寺僉正) 등을 역임하고, 1667년(현종 8) 사도시정(司䆃寺正)이 되었다.
조카 김만기(金萬基)의 딸이 숙종비로서, 숙종이 즉위한 뒤 어영대장 등 군권(軍權)의 요직을 지내면서 권력을 누렸다. 1680년(숙종 6) 김석주(金錫胄)의 주도로 경신대출척을 일으켜 조정에서 남인들을 숙청하는데 적극 참여했으며, 그 공으로 보사공신(保社功臣) 2등과 광남군(光南君)에 봉해졌다.
이후 숙종의 깊은 신임에 힘입어 광주부윤·좌윤·형조참판·어영대장 등의 요직을 두루 역임하였다. 이 시기에는 특히 김석주 등과 함께 훈척의 세력으로서, 송시열(宋時烈) 등과의 협력 관계를 바탕으로 병권을 장악하고 정국을 주도하였다.
1689년 어영대장 재직 중 기사환국으로 남인이 다시 정권을 잡자 공신 칭호를 빼앗기고 강계에 유배되었으며, 무고한 사람들을 많이 죽였다는 죄명으로 고문을 받고 투옥되었다가 죽었다. 일찍부터 성품과 행실이 방자하며 부정 축재를 많이 한다는 비난을 받았다.
특히 1682년 남인 허새(許璽)의 모역사건 당시에 떳떳하지 못한 행동은 서인 소장파의 반감을 부채질하였다. 그 결과 훈척과 서인 노장과의 협력에 소장 세력이 크게 대립하고, 결국 노론과 소론이 갈리는 한 계기가 되었다. 이조판서에 추증되었고, 시호는 충헌(忠獻)이다.